【问题标题】:get all the child attribute value from the xml从 xml 中获取所有子属性值
【发布时间】:2013-04-11 09:26:41
【问题描述】:

这是我的简单 xml 文件:-

<child_2 entity_id="2" value="Root" parent_id="1">
    <child_4 entity_id="4" value="Activities" parent_id="2">
        <child_10066 entity_id="10066" value="Physical1" parent_id="4">
            <child_10067 entity_id="10067" value="Cricket" parent_id="10066">
                <child_10068 entity_id="10068" value="One Day" parent_id="10067"/>
            </child_10067>
        </child_10066>
        <child_10069 entity_id="10069" value="Test2" parent_id="4"/>
        <child_10070 entity_id="10070" value="Test3" parent_id="4"/>
        <child_10071 entity_id="10071" value="Test4" parent_id="4"/>
        <child_10072 entity_id="10072" value="Test5" parent_id="4"/>
        <child_5 entity_id="5" value="Physical" parent_id="4"/>
    </child_4>
</child_2>

我想获取entity_id 4的所有子值
用逗号分隔 , 并另存为文本文件

这是我的 o/p:-
10066,10067,10068,10069,10070,10071

这是我的尝试:-

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" encoding="UTF-8"/>
  <xsl:key name="kChild" match="*[@entity_id]" use="../@entity_id"/>

  <xsl:param name="region" select="'4'" />

  <xsl:template match="/">
    <xsl:apply-templates select="key('kChild', $region)" />
  </xsl:template>

  <xsl:template match="*">
    <xsl:value-of select="@entity_id"/>
    <xsl:text>,</xsl:text>
  </xsl:template>
</xsl:stylesheet>

谢谢

【问题讨论】:

  • 您需要显示给定 XML 的实际输出应该是什么样子。您的 XML 是一个奇怪的结构,其中元素的 ID 连接在标签名称中,我认为在此示例中没有任何好处,因为您将 ID 作为属性。
  • @MrCode 我更新我的问题请检查
  • 我正在添加我的 xslt 文件...
  • 您的意思是要获取@parent_id 值为“4”(或$region)的每个元素的@entity_id 属性值?
  • @EeroHelenius 是的,每个值都有 parent_id = 4 我想要

标签: php javascript xslt xpath


【解决方案1】:

获取@entity_id属性值为$region的元素的每个后代的@entity_id属性值:

样式表

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" encoding="UTF-8"/>

  <xsl:param name="region" select="'4'"/>

  <xsl:template match="/">
    <xsl:apply-templates select="*/*[@entity_id = $region]//*"/>
  </xsl:template>

  <xsl:template match="*">
    <xsl:value-of select="@entity_id"/>
    <!-- Don't add comma after last number -->
    <xsl:if test="not(position() = last())">
      <xsl:text>,</xsl:text>
    </xsl:if>
  </xsl:template>
</xsl:stylesheet>

输入

<child_2 entity_id="2" value="Root" parent_id="1">
  <child_4 entity_id="4" value="Activities" parent_id="2">
    <child_10066 entity_id="10066" value="Physical1" parent_id="4">
      <child_10067 entity_id="10067" value="Cricket" parent_id="10066">
        <child_10068 entity_id="10068" value="One Day" parent_id="10067"/>
      </child_10067>
    </child_10066>
    <child_10069 entity_id="10069" value="Test2" parent_id="4"/>
    <child_10070 entity_id="10070" value="Test3" parent_id="4"/>
    <child_10071 entity_id="10071" value="Test4" parent_id="4"/>
    <child_10072 entity_id="10072" value="Test5" parent_id="4"/>
    <child_5 entity_id="5" value="Physical" parent_id="4"/>
  </child_4>
</child_2>

输出

10066,10067,10068,10069,10070,10071,10072,5

【讨论】:

  • 我想要所有的 10067,10068 在哪里
  • 他们的@parent_id 属性值不是“4”。
  • 哦,我知道但想要 child_4 的所有子值
  • 好的,编辑了我的答案。这次我理解对了吗?
猜你喜欢
  • 1970-01-01
  • 2021-08-26
  • 2016-11-05
  • 2014-05-30
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多