Java XML 获取属性
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/6341203/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Java XML getAttribute
提问by Eve
I'm trying to get an attribute id (fileID
) from my XML document to use as the filename for my XML split. The split works I just need to extract the fileID
to use as the name.
我试图fileID
从我的 XML 文档中获取一个属性 id ( ) 以用作我的 XML 拆分的文件名。拆分工作我只需要提取fileID
用作名称。
I could use this as help on this.
我可以用它作为这方面的帮助。
This is my xml document
这是我的 xml 文档
<root>
<envelope fileID="000152OP.XML">
<record id="850">
</record>
</envelope>
<envelope fileID="000153OP.XML">
<record id="850">
</record>
</envelope>
<envelope fileID="000154OP.XML">
<record id="850">
</record>
</envelope>
</root>
And here's my Java code [EDITED] I can read the attribute now but it doesn't create the last xml file. So in my example it create the first 2 files with the correct name but last fileID "000154OP.XML" isn't created.
这是我的 Java 代码 [已编辑] 我现在可以读取该属性,但它不会创建最后一个 xml 文件。因此,在我的示例中,它使用正确的名称创建前 2 个文件,但未创建最后一个文件 ID“000154OP.XML”。
public static void splitXMLFile (String file) throws Exception {
String[] temp;
String[] temp2;
String[] temp3;
String[] temp4;
String[] temp5;
String[] temp6;
File input = new File(file);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
Document doc = dbf.newDocumentBuilder().parse(input);
XPath xpath = XPathFactory.newInstance().newXPath();
NodeList nodes = (NodeList) xpath.evaluate("//root/envelope", doc, XPathConstants.NODESET);
int itemsPerFile = 1;
Node staff = doc.getElementsByTagName("envelope").item(0);
NamedNodeMap attr = staff.getAttributes();
Node nodeAttr = attr.getNamedItem("fileID");
String node = nodeAttr.toString();
temp = node.split("=");
temp2 = temp[1].split("^\"");
temp3 = temp2[1].split("\.");
Document currentDoc = dbf.newDocumentBuilder().newDocument();
Node rootNode = currentDoc.createElement("root");
File currentFile = new File("C:\XMLFiles\" + temp3[0]+ ".xml");
for (int i=1; i <= nodes.getLength(); i++) {
Node imported = currentDoc.importNode(nodes.item(i-1), true);
rootNode.appendChild(imported);
Node staff2 = doc.getElementsByTagName("envelope").item(i);
NamedNodeMap attr2 = staff2.getAttributes();
Node nodeAttr2 = attr2.getNamedItem("fileID");
String node2 = nodeAttr2.toString();
temp4 = node2.split("=");
temp5 = temp4[1].split("^\"");
temp6 = temp5[1].split("\.");
if (i % itemsPerFile == 0) {
writeToFile(rootNode, currentFile);
rootNode = currentDoc.createElement("root");
currentFile = new File("C:\XMLFiles\" + temp6[0]+".xml");
}
}
writeToFile(rootNode, currentFile);
}
private static void writeToFile(Node node, File file) throws Exception {
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(new DOMSource(node), new StreamResult(new FileWriter(file)));
}
回答by Johan Sj?berg
回答by Balanivash
ArrayList<String> files = new ArrayList<String>();
SAXBuilder builder = new SAXBuilder();
Document Doc;
try {
Doc = builder.build(new File(myxmlfile.xml));
Element root = Doc.getRootElement();
List<Element> category = root.getChildren();
for(int i=0 ; i < category.size(); i++) {
Element elem = category.get(i);
String file = elem.getAttributeValue("fileID");
files.add(file);
}
} catch (Exception e) {
}
This will give you an array list of the fileIds in the XML file. I've used the SAX reader to parse the XML.
这将为您提供 XML 文件中 fileIds 的数组列表。我使用 SAX 阅读器来解析 XML。