Java XML 获取属性 [英] Java XML getAttribute
问题描述
我正在尝试从我的 XML 文档中获取一个属性 id (fileID
) 以用作我的 XML 拆分的文件名.拆分工作我只需要提取 fileID
用作名称.
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.
我可以用它来帮助解决这个问题.
I could use this as help on this.
这是我的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>
这是我的 Java 代码 [已编辑] 我现在可以读取该属性,但它不会创建最后一个 xml 文件.因此,在我的示例中,它使用正确的名称创建前 2 个文件,但未创建最后一个文件 ID000154OP.XML".
And here's my Java code 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.
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)));
}
推荐答案
或许你可以试试下面的xpath:
Perhaps you can try the following xpath:
//root/envelope/record/@id
如果您使用的 XPath 库不支持整个 XPath 集,您可以尝试优秀的库 jaxen
If the XPath library you're using does not support the entire XPath set you can try the excellent library jaxen
这篇关于Java XML 获取属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!