Xml 删除具有';的子元素值通过XSLT为0
我有一个需要用XSLT转换的xml文件。在我的XSLT文件中,我使用xml文件做了很多事情。我首先复制所有元素;然后我重命名了一些元素。最后,我需要为输出删除Xml 删除具有';的子元素值通过XSLT为0,xml,xslt,Xml,Xslt,我有一个需要用XSLT转换的xml文件。在我的XSLT文件中,我使用xml文件做了很多事情。我首先复制所有元素;然后我重命名了一些元素。最后,我需要为输出删除经销商代码名为0的任何经销商代码元素。前两段代码我都在工作,但我已经尝试了我在网上找到的每一段代码,似乎无法删除那些违规的经销商代码元素。我是XSLT新手,所以可能做得都不对;任何帮助都将不胜感激 部分xml代码: <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
经销商代码名
为0的任何经销商代码元素
。前两段代码我都在工作,但我已经尝试了我在网上找到的每一段代码,似乎无法删除那些违规的经销商代码
元素。我是XSLT新手,所以可能做得都不对;任何帮助都将不胜感激
部分xml代码:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="xmlstructure.xsl"?>
<AdBaseData>
<AdBasePreprintInfo FromDistribute="true">
<PreprintInsert>
<Sides>2</Sides>
<PageCount>2</PageCount>
<InsertSchedule>
<AdLocInfo>
<rundates>
<date>12042010</date>
</rundates>
</AdLocInfo>
<invoice-text>South Plaza - Stalker Advertisin</invoice-text>
<BillingOverride Type="Subscriber">49996</BillingOverride>
<deal-code0>
<dealer-code-name>A20</dealer-code-name>
<Delivery-Method Type="Subscriber">
<Selected>true</Selected>
</Delivery-Method>
</deal-code0>
<deal-code1>
<dealer-code-name>0</dealer-code-name>
<Delivery-Method Type="Subscriber">
<Selected>true</Selected>
</Delivery-Method>
</deal-code1>
</InsertSchedule>
</PreprintInsert>
2.
2.
12042010
南广场-跟踪者广告
49996
A20
真的
0
真的
我的xslt:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[starts-with(name(), 'deal-code')]">
<xsl:element name="dealer-code">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="dealer-code[@dealer-code-name='0']">
</xsl:template>
</xsl:stylesheet>
将交易代码
重命名为经销商代码
有效。但是,不输出值为0的任何经销商代码名
的最后一个零件不会。我生成的xml文件仍然列出了每个经销商代码元素。您有两个问题:
源XML中没有任何经销商代码元素。它们是deal-code0
和deal-code1
经销商代码名
是一个元素,而不是一个属性李>
您的XPATH当前将dealer code
元素与@dealer code name='0'
匹配。由于没有经销商代码
元素,也没有经销商代码名称
属性,因此它从不匹配,也不会抑制内容
您需要调整XPATH以匹配交易代码
元素,类似于您在另一个模板中的情况,并为子元素经销商代码名
添加一个附加谓词过滤器,其值为0。此外,由于两个模板具有相似的匹配逻辑,因此它们可能具有相同的优先级。您可能需要提高此编校模板的优先级,以便它“赢得”更一般的匹配:
<xsl:template match="*[starts-with(name(), 'deal-code') and dealer-code-name='0']" priority="1"/>
您有两个问题:
源XML中没有任何经销商代码元素。它们是deal-code0
和deal-code1
经销商代码名
是一个元素,而不是一个属性李>
您的XPATH当前将dealer code
元素与@dealer code name='0'
匹配。由于没有经销商代码
元素,也没有经销商代码名称
属性,因此它从不匹配,也不会抑制内容
您需要调整XPATH以匹配交易代码
元素,类似于您在另一个模板中的情况,并为子元素经销商代码名
添加一个附加谓词过滤器,其值为0。此外,由于两个模板具有相似的匹配逻辑,因此它们可能具有相同的优先级。您可能需要提高此编校模板的优先级,以便它“赢得”更一般的匹配:
<xsl:template match="*[starts-with(name(), 'deal-code') and dealer-code-name='0']" priority="1"/>
您的输入xml中没有元素经销商代码
,但您可以在处理以交易代码
开头的元素时进行筛选,方法是测试这些元素是否具有值为0的子元素经销商代码名
您的输入xml中没有元素经销商代码
,但您可以在处理以交易代码
开头的元素时进行筛选,方法是测试这些元素是否有子元素经销商代码名
,其值为0此输入:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="xmlstructure.xsl"?>
<AdBaseData>
<AdBasePreprintInfo FromDistribute="true">
<PreprintInsert>
<Sides>2</Sides>
<PageCount>2</PageCount>
<InsertSchedule>
<AdLocInfo>
<rundates>
<date>12042010</date>
</rundates>
</AdLocInfo>
<invoice-text>South Plaza - Stalker Advertisin</invoice-text>
<BillingOverride Type="Subscriber">49996</BillingOverride>
<deal-code0>
<dealer-code-name>A20</dealer-code-name>
<Delivery-Method Type="Subscriber">
<Selected>true</Selected>
</Delivery-Method>
</deal-code0>
<deal-code1>
<dealer-code-name>0</dealer-code-name>
<Delivery-Method Type="Subscriber">
<Selected>true</Selected>
</Delivery-Method>
</deal-code1>
</InsertSchedule>
</PreprintInsert>
</AdBasePreprintInfo>
</AdBaseData>
2.
2.
12042010
南广场-跟踪者广告
49996
A20
真的
0
真的
使用此样式表:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[starts-with(name(), 'deal-code')][dealer-code-name = '0']"/>
</xsl:stylesheet>
生成所需的输出:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="xmlstructure.xsl"?><AdBaseData>
<AdBasePreprintInfo FromDistribute="true">
<PreprintInsert>
<Sides>2</Sides>
<PageCount>2</PageCount>
<InsertSchedule>
<AdLocInfo>
<rundates>
<date>12042010</date>
</rundates>
</AdLocInfo>
<invoice-text>South Plaza - Stalker Advertisin</invoice-text>
<BillingOverride Type="Subscriber">49996</BillingOverride>
<deal-code0>
<dealer-code-name>A20</dealer-code-name>
<Delivery-Method Type="Subscriber">
<Selected>true</Selected>
</Delivery-Method>
</deal-code0>
</InsertSchedule>
</PreprintInsert>
</AdBasePreprintInfo>
</AdBaseData>
2.
2.
12042010
南广场-跟踪者广告
49996
A20
真的
此输入:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="xmlstructure.xsl"?>
<AdBaseData>
<AdBasePreprintInfo FromDistribute="true">
<PreprintInsert>
<Sides>2</Sides>
<PageCount>2</PageCount>
<InsertSchedule>
<AdLocInfo>
<rundates>
<date>12042010</date>
</rundates>
</AdLocInfo>
<invoice-text>South Plaza - Stalker Advertisin</invoice-text>
<BillingOverride Type="Subscriber">49996</BillingOverride>
<deal-code0>
<dealer-code-name>A20</dealer-code-name>
<Delivery-Method Type="Subscriber">
<Selected>true</Selected>
</Delivery-Method>
</deal-code0>
<deal-code1>
<dealer-code-name>0</dealer-code-name>
<Delivery-Method Type="Subscriber">
<Selected>true</Selected>
</Delivery-Method>
</deal-code1>
</InsertSchedule>
</PreprintInsert>
</AdBasePreprintInfo>
</AdBaseData>
2.
2.
12042010
南广场-跟踪者广告
49996
A20
真的
0
真的
使用此样式表:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[starts-with(name(), 'deal-code')][dealer-code-name = '0']"/>
</xsl:stylesheet>
生成所需的输出:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="xmlstructure.xsl"?><AdBaseData>
<AdBasePreprintInfo FromDistribute="true">
<PreprintInsert>
<Sides>2</Sides>
<PageCount>2</PageCount>
<InsertSchedule>
<AdLocInfo>
<rundates>
<date>12042010</date>
</rundates>
</AdLocInfo>
<invoice-text>South Plaza - Stalker Advertisin</invoice-text>
<BillingOverride Type="Subscriber">49996</BillingOverride>
<deal-code0>
<dealer-code-name>A20</dealer-code-name>
<Delivery-Method Type="Subscriber">
<Selected>true</Selected>
</Delivery-Method>
</deal-code0>
</InsertSchedule>
</PreprintInsert>
</AdBasePreprintInfo>
</AdBaseData>
2.
2.
12042010
南广场-跟踪者广告
49996
A20
真的
请使用代码格式({}-按钮)对源代码进行格式设置,以便我们可以正确查看源代码。请使用代码格式({}-按钮)对源代码进行格式设置,以便我们可以正确查看源代码。请尝试使用代码格式设置({}-按钮)对源代码进行格式设置。更改线路以删除@