我有一个具有两种元素类型的XML文档。一个仅具有属性的元素类型,另一个仅包含第一个属性的元素类型。

<TagList name="Results">
    <Tag name="type_of_identifier" value="idvalue"/>
    <Tag name="some_other_identifier" value="otheridvalue"/>
    ....
    <Tag name="type" value="asdfaf"/>
    <TagList name="SubList">
        <Tag name="param1" value="value1"/>
        <Tag name="param2" value="value2"/>
    </TagList>
</TagList>


我是XML(也是Java)的新手,但是为什么要用这种方式来设置它却茫然不知所措。

有没有一种方法可以通过指定名称来获取节点的值,而不必遍历每个节点?

最佳答案

在处理文件之前,请考虑将文件转换为更卫生的文件。具有两个模板规则的简单XSLT样式表:

<xsl:template match="TagList">
  <xsl:element name="{@name}">
    <xsl:apply-templates/>
  </xsl:element>
</xsl:template>

<xsl:template match="Tag">
  <xsl:element name="{@name}">
    <xsl:value-of select="@value"/>
  </xsl:element>
</xsl:template>


会将其转换为如下形式:

<Results>
    <type_of_identifier>idvalue</type_of_identfier>
    <some_other_identifier>otheridvalue<some_other_identifier/>
    ....
    <type>asdfaf</type>
    <SubList>
        <param1>value1</param1>
        <param2>value2</param2>
    </SubList>
</Results>


这样做的好处是使文档的所有后续处理变得更加容易。

09-29 22:02