gpt4 book ai didi

xml - XSLT 1.0 : copy everything except certain nodes according to value and variable

转载 作者:行者123 更新时间:2023-12-03 16:12:41 24 4
gpt4 key购买 nike

我在系统环境中获得了以下(简化的)XML:

<?xml version="1.0" encoding="UTF-8"?>
<root>
<IS_LOG>
<USER>19291</USER>
<DATE>2011-08-15</DATE>
<TIME>15:36:36</TIME>
<SYST>sy1</SYST>
<MATERIALS>
<item>
<sy>100</sy>
<mat>000000000000310000</mat>
</item>
<item>
<sy>100</sy>
<mat>000000000000491078</mat>
</item>
</MATERIALS>
</IS_LOG>
</root>

我使用的系统在运行时向我传递了一个变量,该变量未包含在上述 XML 结构中。

我有以下 XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl" version="1.0">

<!-- System variable whose value I normally only get only at runtime;
for test purposes set locally -->
<xsl:variable name="SenderService" select="'AT'"/>

<xsl:template match="@*|node()">
<xsl:choose>
<xsl:when test="$SenderService='AT'">
<xsl:copy>
<xsl:apply-templates mode="AT" select="@*|node()"/>
</xsl:copy>
</xsl:when>
<xsl:otherwise>
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:otherwise>
</xsl:choose>
</xsl:template>


<xsl:template mode="AT" match="item[mat &gt; 000000000000299999 and mat &lt; 000000000000399999]"/>

</xsl:stylesheet>

现在我需要复制所有元素 item不包括那些 mat是在 300000 到 399999 和 SenderService 之间的数字范围内是“AT”。
如果要在本地进行测试,我会更改 SenderService在我的 XSLT 中,例如'Z',输出看起来不错,都是 items得到复制:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<IS_LOG>
<USER>19291</USER>
<DATE>2011-08-15</DATE>
<TIME>15:36:36</TIME>
<SYST>sy1</SYST>
<MATERIALS>
<item>
<sy>100</sy>
<mat>000000000000310000</mat>
</item>
<item>
<sy>100</sy>
<mat>000000000000491078</mat>
</item>
</MATERIALS>
</IS_LOG>
</root>

但是如果我设置 SenderService 'AT' 输出如下所示:
    <?xml version="1.0" encoding="UTF-8"?><root>

19291
2011-08-15
15:36:36
sy1



100
000000000000491078



</root>

正确的项目被复制但没有标签。有没有人知道如何更改 XSLT?

感谢您的帮助,
彼得

最佳答案

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>

<xsl:variable name="SenderService" select="'AT'"/>

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


<xsl:template match="item[mat &gt; 000000000000299999 and mat &lt; 000000000000399999]">
<xsl:if test="$SenderService != 'AT'">
<xsl:copy-of select="."/>
</xsl:if>
</xsl:template>

</xsl:stylesheet>

关于xml - XSLT 1.0 : copy everything except certain nodes according to value and variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7078881/

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