gpt4 book ai didi

java - 如何使用 XSLT 过滤 XML 节点内的元素进行转换?

转载 作者:行者123 更新时间:2023-12-02 11:45:39 25 4
gpt4 key购买 nike

我正在尝试使用 XSLT 转换 XML,但需要避免转换特定节点内的元素。我怎样才能实现这一目标?

我当前的 XSLT 修改了所有节点。下面是我的 XML,我需要避免 <Makers> 中的所有元素节点被转换:

<Data>
<Makers>
<Type>ABC</Type>
</Set>
<Block>
<FirstName>ZSPZCVCR</FirstName>
<LastName/>
</Block>
</Makers>
<Keeper>
<Code>12</Node>
<Name>Division</Name>
<Number/>
<Company/>
</Keeper>
</Data>

下面是我的 XSLT:

    <?xml version="1.0" encoding="UTF-8"?>
<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="*[not(*)][not(normalize-space())]">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:text>12345</xsl:text>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

请提供任何解决方案或建议一种修改现有 XSLT 的方法,以避免 <Makers> 的所有元素免遭修改。

所需的输出应如下所示,其中 <Makers> 内的任何空节点没有被修改,但除此之外所有空节点都被修改为值“12345”:

<Data>
<Makers>
<Type>ABC</Type>
</Set>
<Block>
<FirstName>ZSPZCVCR</FirstName>
<LastName/>
</Block>
</Makers>
<Keeper>
<Code>12</Node>
<Name>Division</Name>
<Number>12345</Number>
<Company>12345</Company>
</Keeper>
</Data>

最佳答案

您应该添加一个谓词:

[not(ancestor::Makers)]

到你的第二个模板。比如

<xsl:template match="*[not(*)][not(normalize-space())][not(ancestor::Makers)]">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:text>12345</xsl:text>
</xsl:copy>
</xsl:template>

关于java - 如何使用 XSLT 过滤 XML 节点内的元素进行转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48218791/

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