【问题标题】:how to find out if a node is a parent node using xslt for an xml format dynamically?如何动态地确定一个节点是否是使用 xslt 用于 xml 格式的父节点?
【发布时间】:2017-04-04 20:20:14
【问题描述】:
<main>

     <p>p1</p>
     <p>p2</p>
     <q>
        <z>z1</z>
        <a>a1</a>
        <b>
           <c>c1</c>
        </b>
     </q>

</main>

我如何一般使用 xslt 解析这种 xml 格式,以便找出哪个节点是父节点,我不想专门使用元素名称,它应该在旅途中发生?

我希望输出如下: z1 a1 c1

仅具有子节点但动态的元素

【问题讨论】:

  • //node()[node()] 选择至少有一个子节点的所有节点。
  • “找出来”是一个模棱两可的描述。您打算如何处理这一发现?向我们展示您的预期输出。
  • @michael.hor257k 我现在已经编辑了问题
  • 你的输出对我来说毫无意义。为什么不包括p1? p 元素是叶节点,就像 z、a 和 q 元素一样。

标签: xml xslt xpath xquery xslt-2.0


【解决方案1】:

我希望输出如下:z1 a1 c1

仅具有子节点但动态的元素

您似乎想要元素的字符串值,其父元素是不是 XML 文档顶部元素的元素。

要生成所需字符串的序列,一种方法是使用此 XPath 2.0 表达式:

/*//*/*/text()[normalize-space()]

基于 XSLT-2.0 的验证:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

  <xsl:template match="/">
    <xsl:sequence select="/*//*/*/text()[normalize-space()]"/>
  </xsl:template>
</xsl:stylesheet>

当此转换应用于提供的 XML 文档时:

<main>
    <p>p1</p>
    <p>p2</p>
    <q>
        <z>z1</z>
        <a>a1</a>
        <b>
            <c>c1</c>
        </b>
    </q>
</main>

产生想要的结果:

z1a1c1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 2011-08-06
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多