我有一个复杂的XML结构,该结构是我从第三方收到的。我想解析上面的XML文档并使用各自的值创建一个Map。哪个库可用于解析复杂的XML
我尝试了XPath,但是无法获得预期的结果。
<OBJECT TYPE="BookListInterface" REF="OBJECT.BookListInterface">
<Books TYPE="BookArray" length="5">
<Item0 TYPE="BookName" REF="Item0.BookName.1">AA</Item0>
<Item1 TYPE="BookName" REF="Item1.BookName.1">BB</Item1>
<Item2 TYPE="BookName" REF="Item2.BookName.1">CC</Item2>
<Item3 TYPE="BookName" REF="Item3.BookName.1">DD</Item3>
<Item4 TYPE="BookName" REF="Item4.BookName.1">EE</Item4>
<Item5 TYPE="BookName" REF="Item5.BookName.1">FF</Item5>
</Books>
<BookRates TYPE="DoubleArray" length="5">
<Item0 TYPE="Double">10</Item0>
<Item1 TYPE="Double">20</Item1>
<Item2 TYPE="Double">30</Item2>
<Item3 TYPE="Double">40</Item3>
<Item4 TYPE="Double">50</Item4>
<Item5 TYPE="Double">60</Item5>
</BookRates>
</OBJECT>
我想解析上述XML文档,并使用相应的值(即
)创建一个MapAA --> 10,
BB --> 20
,依此类推。如何在JAVA中实现这一目标?
答案 0 :(得分:1)
应用此XSLT-1.0模板,您可以获得所需的输出:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:key name="keys" match="/OBJECT/Books/*" use="substring-after(local-name(),'Item')" />
<xsl:template match="text()" />
<xsl:template match="/OBJECT/BookRates/*">
<xsl:variable name="number" select="substring-after(local-name(),'Item')" />
<!-- Group this output to get a map result -->
<xsl:value-of select="key('keys', $number)/text()" /> <!-- Mapping key -->
<xsl:value-of select="' --> '" />
<xsl:value-of select="text()" /> <!-- Mapping value -->
<xsl:value-of select="'
'" />
<!-- End of grouping -->
</xsl:template>
</xsl:stylesheet>
其主要功能是将/OBJECT/Books
的值映射到/OBJECT/BookRates/
的值。这可以通过使用substring-after(local-name(),'Item')
创建一个键值来实现。
其(文本)输出为:
AA --> 10
BB --> 20
CC --> 30
DD --> 40
EE --> 50
FF --> 60
在Java中,您可以从结果中提取标记的Mapping key
和Mapping value
值。