【问题标题】:XSLT 2.0: Overriding nodes with grandchild nodesXSLT 2.0:用孙节点覆盖节点
【发布时间】:2012-02-28 16:09:01
【问题描述】:

我正在尝试找到一种方法,将一个节点替换为在树的更深处具有相同名称的节点。例如,使用以下输入:

<root>
    <foo>
        <a>1</a>
        <b>2</b>
        <c>3</c>
        <bar>
            <a>100</a>
            <c>5000</c>
        </bar>
    </foo>
</root>

我想制作这样的东西:

<root>
    <foo>
        <a>100</a>
        <b>2</b>
        <c>5000</c>
    </foo>
</root>

我需要能够替换任意数量的节点,并且我还想动态地找出列表,而不是拼出所有的可能性,因为将来事情可能会发生变化。另一个要求是父节点的顺序必须保持不变。 (具体来说,我的最终输出将是一个 CSV 文件,因此列需要与标题对齐。)

这是我第一次尝试学习 XSLT,我完全被这个难住了!任何帮助将不胜感激。我正在使用 XSLT 2.0,顺便说一句。

谢谢, 标记

【问题讨论】:

    标签: xslt-2.0 xpath-2.0


    【解决方案1】:

    对于不缩进格式化代码的讨厌的 SO 错误,我深表歉意!

    他们几个月都无法解决这个问题......

    这种转变

    <xsl:stylesheet version="2.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     xmlns:xs="http://www.w3.org/2001/XMLSchema">
     <xsl:output omit-xml-declaration="yes" indent="yes"/>
     <xsl:strip-space elements="*"/>
    
     <xsl:template match="node()|@*">
      <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
      </xsl:copy>
     </xsl:template>
    
     <xsl:template match=
     "*[*]
           [every $leaf in .//*[not(*)]
          satisfies
            name($leaf) = preceding::*/name()
           ]
     "/>
    
     <xsl:template match=
      "*[not(*) and name() = following::*/name()]">
    
      <xsl:sequence select=
      "following::*[name() = name(current())][1]"/>
     </xsl:template>
    </xsl:stylesheet>
    

    应用于提供的 XML 文档时

    <root>
        <foo>
            <a>1</a>
            <b>2</b>
            <c>3</c>
            <bar>
                <a>100</a>
                <c>5000</c>
            </bar>
        </foo>
    </root>
    

    产生想要的正确结果

    <root>
       <foo>
          <a>100</a>
          <b>2</b>
          <c>5000</c>
       </foo>
    </root>
    

    【讨论】:

    • 天哪!我不能因为自己无法解决这个问题而感到难过。不过,它就像一个魅力。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2014-05-31
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-22
    • 2016-02-29
    相关资源
    最近更新 更多