在同一行中获取两个用逗号分隔的 xml 元素
Getting two xml elements sepearted by comma in the same row
我想要一个在 xml 文件上运行的 xslt 文件,以在一行中获取两个 prod-id 和 article-number,并用逗号分隔。这应该只发生在
产品没有项目。
我的输入 xml 文件是:
<?xml version="1.0" encoding="UTF-8"?>
<products>
<product>
<prod-id>P16653</prod-id>
<product-status>CREATED</product-status>
<validation-status>Valid</validation-status>
<duplication-status>Unique</duplication-status>
<content-status>New</content-status>
<article-number>233060</article-number>
<languagedata>
<language>
<languageid>en-GB</languageid>
<buying-description>FENDI L VELOUR SWEAT PANTS BEIGE</buying-description>
<customer-long-description>FENDI L VELOUR SWEAT PANTS BEIGE</customer-long-description>
</language>
</languagedata>
<items/>
<created-on>2016-08-12T11:30:00</created-on>
<created-by>Administrator</created-by>
<last-changed-on>2016-08-04T17:34:00</last-changed-on>
<last-changed-by>ap0712</last-changed-by>
<delete>false</delete>
</product>
<product>
<prod-id>P16659</prod-id>
<product-status>CREATED</product-status>
<validation-status>Valid</validation-status>
<duplication-status>Unique</duplication-status>
<content-status>New</content-status>
<article-number>345940</article-number>
<languagedata>
<language>
<languageid>en-GB</languageid>
<buying-description>FENDI L VELOUR SWEAT PANTS BEIGE</buying-description>
<customer-long-description>FENDI L VELOUR SWEAT PANTS BEIGE</customer-long-description>
</language>
</languagedata>
<items/>
<created-on>2016-08-12T11:30:00</created-on>
<created-by>Administrator</created-by>
<last-changed-on>2016-08-04T17:34:00</last-changed-on>
<last-changed-by>ap0712</last-changed-by>
<delete>false</delete>
</product>
<product>
<prod-id>P16755</prod-id>
<product-status>CREATED</product-status>
<validation-status>Valid</validation-status>
<duplication-status>Unique</duplication-status>
<content-status>New</content-status>
<article-number>11060</article-number>
<languagedata>
<language>
<languageid>en-GB</languageid>
<buying-description>FENDI L VELOUR SWEAT PANTS BEIGE</buying-description>
<customer-long-description>FENDI L VELOUR SWEAT PANTS BEIGE</customer-long-description>
</language>
</languagedata>
<items>
<item>
<item-id>i16754</item-id>
<item-status>CREATED</item-status>
<validation-status>Valid</validation-status>
<duplication-status>Unique</duplication-status>
<content-status>New</content-status>
</item>
</items>
<created-on>2016-08-12T11:30:00</created-on>
<created-by>Administrator</created-by>
<last-changed-on>2016-08-04T17:34:00</last-changed-on>
<last-changed-by>ap0712</last-changed-by>
<delete>false</delete>
</product>
<product>
<prod-id>P16633</prod-id>
<product-status>CREATED</product-status>
<validation-status>Valid</validation-status>
<duplication-status>Unique</duplication-status>
<content-status>New</content-status>
<article-number>21069</article-number>
<languagedata>
<language>
<languageid>en-GB</languageid>
<buying-description>FENDI L VELOUR SWEAT PANTS BEIGE</buying-description>
<customer-long-description>FENDI L VELOUR SWEAT PANTS BEIGE</customer-long-description>
</language>
</languagedata>
<items/>
<created-on>2016-08-12T11:30:00</created-on>
<created-by>Administrator</created-by>
<last-changed-on>2016-08-04T17:34:00</last-changed-on>
<last-changed-by>ap0712</last-changed-by>
<delete>false</delete>
</product>
<product>
<prod-id>P16785</prod-id>
<product-status>CREATED</product-status>
<validation-status>Valid</validation-status>
<duplication-status>Unique</duplication-status>
<content-status>New</content-status>
<article-number>9881061</article-number>
<languagedata>
<language>
<languageid>en-GB</languageid>
<buying-description>FENDI L VELOUR SWEAT PANTS BEIGE</buying-description>
<customer-long-description>FENDI L VELOUR SWEAT PANTS BEIGE</customer-long-description>
</language>
</languagedata>
<items>
<item>
<item-id>i16757</item-id>
<item-status>CREATED</item-status>
<validation-status>Valid</validation-status>
<duplication-status>Unique</duplication-status>
<content-status>New</content-status>
</item>
</items>
<created-on>2016-08-12T11:30:00</created-on>
<created-by>Administrator</created-by>
<last-changed-on>2016-08-04T17:34:00</last-changed-on>
<last-changed-by>ap0712</last-changed-by>
<delete>false</delete>
</product>
</products>
我想要输出为
P16653,233060
P16659,345940
我正在使用从该论坛获得的以下 xslt 并尝试对其进行修改,但它只提供文章编号,而不是两者
<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:value-of select="products/product[not(items/item)]/prod-id/concat(local-name(), ' ', .)" separator=" "/>
<xsl:value-of select="products/product[not(items/item)]/article-number/concat(local-name(), ' ', .)" separator=" "/>
</xsl:template>
</xsl:transform>
你为什么不简单地做:
<xsl:template match="/products">
<xsl:for-each select="product[not(items/item)]">
<xsl:value-of select="prod-id"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="article-number"/>
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:template>
当我使用
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:value-of select="products/product[not(items/item)]/concat(prod-id, ',', article-number)" separator=" "/>
</xsl:template>
</xsl:stylesheet>
使用像 Saxon 9 这样的 XSLT 2.0 处理器,我得到
P16653,233060
P16659,345940
P16633,21069
我想要一个在 xml 文件上运行的 xslt 文件,以在一行中获取两个 prod-id 和 article-number,并用逗号分隔。这应该只发生在 产品没有项目。
我的输入 xml 文件是:
<?xml version="1.0" encoding="UTF-8"?>
<products>
<product>
<prod-id>P16653</prod-id>
<product-status>CREATED</product-status>
<validation-status>Valid</validation-status>
<duplication-status>Unique</duplication-status>
<content-status>New</content-status>
<article-number>233060</article-number>
<languagedata>
<language>
<languageid>en-GB</languageid>
<buying-description>FENDI L VELOUR SWEAT PANTS BEIGE</buying-description>
<customer-long-description>FENDI L VELOUR SWEAT PANTS BEIGE</customer-long-description>
</language>
</languagedata>
<items/>
<created-on>2016-08-12T11:30:00</created-on>
<created-by>Administrator</created-by>
<last-changed-on>2016-08-04T17:34:00</last-changed-on>
<last-changed-by>ap0712</last-changed-by>
<delete>false</delete>
</product>
<product>
<prod-id>P16659</prod-id>
<product-status>CREATED</product-status>
<validation-status>Valid</validation-status>
<duplication-status>Unique</duplication-status>
<content-status>New</content-status>
<article-number>345940</article-number>
<languagedata>
<language>
<languageid>en-GB</languageid>
<buying-description>FENDI L VELOUR SWEAT PANTS BEIGE</buying-description>
<customer-long-description>FENDI L VELOUR SWEAT PANTS BEIGE</customer-long-description>
</language>
</languagedata>
<items/>
<created-on>2016-08-12T11:30:00</created-on>
<created-by>Administrator</created-by>
<last-changed-on>2016-08-04T17:34:00</last-changed-on>
<last-changed-by>ap0712</last-changed-by>
<delete>false</delete>
</product>
<product>
<prod-id>P16755</prod-id>
<product-status>CREATED</product-status>
<validation-status>Valid</validation-status>
<duplication-status>Unique</duplication-status>
<content-status>New</content-status>
<article-number>11060</article-number>
<languagedata>
<language>
<languageid>en-GB</languageid>
<buying-description>FENDI L VELOUR SWEAT PANTS BEIGE</buying-description>
<customer-long-description>FENDI L VELOUR SWEAT PANTS BEIGE</customer-long-description>
</language>
</languagedata>
<items>
<item>
<item-id>i16754</item-id>
<item-status>CREATED</item-status>
<validation-status>Valid</validation-status>
<duplication-status>Unique</duplication-status>
<content-status>New</content-status>
</item>
</items>
<created-on>2016-08-12T11:30:00</created-on>
<created-by>Administrator</created-by>
<last-changed-on>2016-08-04T17:34:00</last-changed-on>
<last-changed-by>ap0712</last-changed-by>
<delete>false</delete>
</product>
<product>
<prod-id>P16633</prod-id>
<product-status>CREATED</product-status>
<validation-status>Valid</validation-status>
<duplication-status>Unique</duplication-status>
<content-status>New</content-status>
<article-number>21069</article-number>
<languagedata>
<language>
<languageid>en-GB</languageid>
<buying-description>FENDI L VELOUR SWEAT PANTS BEIGE</buying-description>
<customer-long-description>FENDI L VELOUR SWEAT PANTS BEIGE</customer-long-description>
</language>
</languagedata>
<items/>
<created-on>2016-08-12T11:30:00</created-on>
<created-by>Administrator</created-by>
<last-changed-on>2016-08-04T17:34:00</last-changed-on>
<last-changed-by>ap0712</last-changed-by>
<delete>false</delete>
</product>
<product>
<prod-id>P16785</prod-id>
<product-status>CREATED</product-status>
<validation-status>Valid</validation-status>
<duplication-status>Unique</duplication-status>
<content-status>New</content-status>
<article-number>9881061</article-number>
<languagedata>
<language>
<languageid>en-GB</languageid>
<buying-description>FENDI L VELOUR SWEAT PANTS BEIGE</buying-description>
<customer-long-description>FENDI L VELOUR SWEAT PANTS BEIGE</customer-long-description>
</language>
</languagedata>
<items>
<item>
<item-id>i16757</item-id>
<item-status>CREATED</item-status>
<validation-status>Valid</validation-status>
<duplication-status>Unique</duplication-status>
<content-status>New</content-status>
</item>
</items>
<created-on>2016-08-12T11:30:00</created-on>
<created-by>Administrator</created-by>
<last-changed-on>2016-08-04T17:34:00</last-changed-on>
<last-changed-by>ap0712</last-changed-by>
<delete>false</delete>
</product>
</products>
我想要输出为
P16653,233060
P16659,345940
我正在使用从该论坛获得的以下 xslt 并尝试对其进行修改,但它只提供文章编号,而不是两者
<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:value-of select="products/product[not(items/item)]/prod-id/concat(local-name(), ' ', .)" separator=" "/>
<xsl:value-of select="products/product[not(items/item)]/article-number/concat(local-name(), ' ', .)" separator=" "/>
</xsl:template>
</xsl:transform>
你为什么不简单地做:
<xsl:template match="/products">
<xsl:for-each select="product[not(items/item)]">
<xsl:value-of select="prod-id"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="article-number"/>
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:template>
当我使用
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:value-of select="products/product[not(items/item)]/concat(prod-id, ',', article-number)" separator=" "/>
</xsl:template>
</xsl:stylesheet>
使用像 Saxon 9 这样的 XSLT 2.0 处理器,我得到
P16653,233060
P16659,345940
P16633,21069