这是我用来解析的xml。
<bookstore>
<book category="children">
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="web">
<title>Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
这就是它的模式。
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="bookstore">
<xs:complexType>
<xs:sequence>
<xs:element name="book" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="title"/>
<xs:element type="xs:string" name="author"/>
<xs:element type="xs:short" name="year"/>
<xs:element type="xs:float" name="price"/>
</xs:sequence>
<xs:attribute type="xs:string" name="category" use="optional"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
我已经使用javax.xml库编写了代码来验证和解析它,并且我能够从xsd获得所有元素名。在这里,我在获取属性的元素名时遇到了一些困难。
例如,在上面的xsd中,我们有一个名为category的属性,在这里我只想得到它的元素名book(我们可以在xml文件中找到它,我看不到它是属性,它的元素是so and so的任何关系)。我怎样才能得到这个值?最后我只想组成一个字符串,类似于这本书。
有谁能建议我怎样才能组成这根绳子吗?提前谢谢。
用于获取属性名称类别的代码。
val attrList = doc.getElementsByTagName("xs:attribute")
val attrName = attrList.item(0).getAttributes.item(0).getNodeValue
2条答案
按热度按时间8gsdolmq1#
可以使用访问属性
@
. 例如,假设我们有:因此,以下是:
将提供:
代码在scastie运行。您可以在scala上阅读更多关于高级xml解析的内容:深入的xml解析,以及alvinalexander的提取xml标记属性。
ny6fqffe2#
对于这个特定的示例,可以使用以下xpath
.//*[local-name()='attribute' and @name='category']/ancestor::*[local-name()='element'][1]/@name
.下面是一个在java中使用它的示例: