gpt4 book ai didi

xml - 基本 XML/XSLT 转换 : search & replace

转载 作者:数据小太阳 更新时间:2023-10-29 02:52:34 25 4
gpt4 key购买 nike

我是 XML 和 XSLT 的新手,花了一些时间研究应该是一个非常简单的搜索和替换案例。我似乎无法获得正确的语法。

本练习的总体目标是将元素“NewCustomer”中的“Y”和“N”的值分别替换为“true”或“false”。

这是我的示例数据。

<?xml version="1.0"?>
<CustomerList>
<Customer>
<CustomerID>1111</CustomerID>
<CompanyName>Sean Chai</CompanyName>
<City>New York</City>
<NewCustomer>N</NewCustomer>
</Customer>
<Customer>
<CustomerID>1112</CustomerID>
<CompanyName>Tom Johnston</CompanyName>
<City>Los Angeles</City>
<NewCustomer>N</NewCustomer>
</Customer>
<Customer>
<CustomerID>1113</CustomerID>
<CompanyName>Institute of Art</CompanyName>
<City>Chicago</City>
<NewCustomer>Y</NewCustomer>
</Customer>
</CustomerList>

这是转换样式表。

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<!-- Identity Template (applies to all nodes and will copy all nodes -->
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>

<xsl:template match="Customer">
<xsl:choose>
<xsl:when test="NewCustomer = 'Y'">
<xsl:text>true</xsl:text>
</xsl:when>
<xsl:when test="NewCustomer = 'N'">
<xsl:text>false</xsl:text>
</xsl:when>
</xsl:choose>
</xsl:template>

</xsl:stylesheet>

这是我的输出。

  <?xml version="1.0" encoding="utf-8" ?> 
<CustomerList>false false true</CustomerList>

这是我希望它输出的内容。

<?xml version="1.0"?>
<CustomerList>
<Customer>
<CustomerID>1111</CustomerID>
<CompanyName>Sean Chai</CompanyName>
<City>New York</City>
<NewCustomer>false</NewCustomer>
</Customer>
<Customer>
<CustomerID>1112</CustomerID>
<CompanyName>Tom Johnston</CompanyName>
<City>Los Angeles</City>
<NewCustomer>false</NewCustomer>
</Customer>
<Customer>
<CustomerID>1113</CustomerID>
<CompanyName>Institute of Art</CompanyName>
<City>Chicago</City>
<NewCustomer>true</NewCustomer>
</Customer>
</CustomerList>

我错过了什么,为什么?我看到,如果我省略检查 NewCustomer 的子句,则会输出整个输出。但是,选择为 NewCustomer 输出正确更改的值会导致仅显示这些值。我必须在第二个模板中制作之前的模板吗?

最佳答案

Jim Garrison's 将从任何具有属性的 NewCustomer 元素中剥离属性。正如托马拉克所说,有点脏。

此版本几乎是将您的要求直译为 XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>

<xsl:template match="NewCustomer/text()[.='Y']">
<xsl:text>true</xsl:text>
</xsl:template>

<xsl:template match="NewCustomer/text()[.='N']">
<xsl:text>false</xsl:text>
</xsl:template>

</xsl:stylesheet>

源树中唯一没有完全复制到结果集中的节点是文本节点,这些节点是 NewCustomer 元素的子元素,其值为 YN;对于那些,它会分别发出 truefalse

关于xml - 基本 XML/XSLT 转换 : search & replace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1501152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com