我有一个xml文件,包含动态生成的标签,如下所示
<ABC>
<XYZ>
<PQR DURI="http://try.org/claims">
<LMN>
<URI>http://yyyy/givenname</ClaimURI>
<DName>First Name</DisplayName>
<FoundationName>givenName</FoundationName>
<Description>First Name</Description>
<Required />
<DisplayOrder>1</DisplayOrder>
<SuppDefault />
</LMN>
<LMN>
<CURI>http://kkkk/nickname</ClaimURI>
<DisplayN>Nick Name</DisplayName>
<AttributeID>nickName</AttributeID>
<SDA>23edded<SDA>
<Description>Nick Name</Description>
<Required />
<DisplayOrder>2</DisplayOrder>
<TransitNumber>89393</TransitNumber>
</LMN>
</PQR>
</XYZ>
</ABC>
我想阅读上面的xml格式,并将它们作为键/值对,标签名称和值分别添加到Map<String,String>
。我不知道<LMN>
标签之间的标签名称,因为它们是动态添加的。有没有办法做到这一点。
我尝试使用以下代码,
Root = element.getFirstChildWithName(new QName(XYZ)
OMElement IteratorOne = Root.getChildrenWithLocalName(PQR)
Iterator<OMElement> IteratorTwo = dialect.getChildrenWithLocalName(LMN);
while (IteratorTwo.hasNext()) {
Element = IteratorTwo.next();
Iterator iterator = Element.getChildren();
while (iterator.hasNext()) {
iterator.next();
}
}
答案 0 :(得分:0)
我有一个人为一件作品做了这件事。我曾经使用过dom解析器来做到这一点。这是一个代码摘录,我重新设计了一些以适合您的使用。我在代码中假设myString包含您的XML文本。如果您有自己的流,可以直接在dBuilder中使用它。
public static void convertNodeToMap(Node node, Map<String, String> map) {
if (node != null) {
if (node.hasChildNodes()) {
NodeList list = node.getChildNodes();
for (int count = 0; count < list.getLength(); count++) {
map.put(list.item(count).getNodeName(), list.item(count).getTextContent());
}
}
}
}
这是convertNodeToMap的代码
compare_masses <- function(mass_lst){
for (i in seq_along(mass_lst)) {
positions <- which(abs(AB_massLst_numeric - mass_lst[i]) < 0.02)
rows <- AB_lst[positions,]
match_df <- rbind(match_df, rows)
}
}
如果输入文档的大小相对较大,则必须注意DOM解析可能会变慢。