gpt4 book ai didi

java - 如何获取XML中的属性

转载 作者:行者123 更新时间:2023-12-01 07:39:36 25 4
gpt4 key购买 nike

感谢您之前的回复。

我正在使用 java(SAXParser) 解析 XML 文件,我不确定如何使用属性值解析属性值(元数据)。我给出了两个主要类别 <category name="XYZ" /> <category name="ABC"/>'

            <subcategory name="" loc="C://program files" link="www.sample.com" parentnode="XYZ"/>
<subcategory name="" loc="C://program files" link="http://" parentnode="ABC"/>`

在子类别中,我已将主类别与父节点属性链接起来。我的问题是我想获取仅包含特定父属性的所有属性。 (例如)我想要仅驻留在父属性“ABC”中的所有属性。这有可能获得一个值吗?

最佳答案

下面的代码可以解决您的问题吗?

XML

<?xml version="1.0"?>
<categories>
<category name="ABC">
<subcategory name="123"
loc="C://program files"
link="www.sample.com"
parentnode="ABC"/>
<subcategory name="456"
loc="C://program files"
link="http://"
parentnode="ABC"/>
</category>

<category name="XYZ">
<subcategory name="123"
loc="C://program files"
link="www.sample.com"
parentnode="XYZ"/>
<subcategory name="456"
loc="C://program files"
link="http://abc.com"
parentnode="XYZ"/>
</category>
</categories>

JAVA

package com.stackoverflow;

import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Question6855476 {
private static final String CFG_XML_PATH = "D:\\sample\\path\\question6855476.xml";
private static final String searchArg = "ABC";

public static void main(String[] args) {

List locList = getLocsByCategoryName(searchArg);
List linkList = getLinksByCategoryName(searchArg);

printCollection(locList,"LOC");
printCollection(linkList,"LINKS");

}

private static void printCollection(List locList, String string) {
System.out.println();
System.out.println("### Collection: "+string+"\n");
if(locList.isEmpty()) {
System.out.println("\tNo items. Collection is empty.");
} else {
for(Object obj: locList) {
System.out.println("\t"+obj);
}
}

}

private static List getLocsByCategoryName(String catName) {
if(null==catName||catName.length()<=0) {
System.out.println("ERROR: catName is null/blank");
return Collections.EMPTY_LIST;
} else {
return getSubcatAttrValuesByAttrName("loc", catName);
}
}

private static List getLinksByCategoryName(String catName) {
if(null==catName||catName.length()<=0) {
System.out.println("ERROR: catName is null/blank");
return Collections.EMPTY_LIST;
} else {
return getSubcatAttrValuesByAttrName("link", catName);
}
}

private static List<Object> getSubcatAttrValuesByAttrName(String attrName, String catName) {

List<Object> list = new ArrayList<Object>();

if(null==attrName||attrName.length()<=0) {
System.out.println("ERROR: attrName is null/blank");
} else {
try {
File file = new File(CFG_XML_PATH);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(file);
doc.getDocumentElement().normalize();

NodeList catLst = doc.getElementsByTagName("category");

for (int i = 0; i < catLst.getLength(); i++) {

Node cat = catLst.item(i);

NamedNodeMap catAttrMap = cat.getAttributes();
Node catAttr = catAttrMap.getNamedItem("name");

if(catName.equals(catAttr.getNodeValue())){ // CLUE!!!

NodeList subcatLst = cat.getChildNodes();

for (int j = 0; j < subcatLst.getLength(); j++) {
Node subcat = subcatLst.item(j);
NamedNodeMap subcatAttrMap = subcat.getAttributes();

if(subcatAttrMap!=null) {
Node subcatAttr = subcatAttrMap.getNamedItem(attrName);
list.add(subcatAttr.getNodeValue());
}
}
}
}
} catch (Exception e) { // FIXME
e.printStackTrace();
}
}
return list;
}

}

我基于 this article

关于java - 如何获取XML中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6855476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com