有没有办法可以提取数据,以便输出如下?
Color, Cognac, Shoe Size, 12, 10994
Color, Cognac, Shoe Size, 13, 10995
任何标签内的值都可以是动态的,因此选择器必须使用标签名称
动态数量为SKU
s。
我能够提取个别值,例如
//SKUs/Attributes/name/text() .. Color
//SKUs/Attributes/Values/values/text() .. Cognac
但SKUs+Attributes
数量的动态性质具有挑战性。
XML
..
<?xml version="1.0" encoding="UTF-8"?>
<root>
<SKUs>
<Attributes>
<Values>
<values>Cognac</values>
</Values>
<name>Color</name>
</Attributes>
<Attributes>
<Values>
<values>12</values>
</Values>
<name>Shoe Size</name>
</Attributes>
<SKUUniqueID>10994</SKUUniqueID>
</SKUs>
<SKUs>
<Attributes>
<Values>
<values>Cognac</values>
</Values>
<name>Color</name>
</Attributes>
<Attributes>
<Values>
<values>13</values>
</Values>
<name>Shoe Size</name>
</Attributes>
<SKUUniqueID>10995</SKUUniqueID>
</SKUs>
</root>
答案 0 :(得分:0)
这是你使用java的方法。
你需要首先计算SKU并重复它们
import java.io.FileInputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
public class XPathExample {
public static void main(String[] args) throws Exception {
/*
* disclaimer - code from http://viralpatel.net/blogs/java-xml-xpath-tutorial-parse-xml/
*/
DocumentBuilderFactory builderFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document xmlDocument = builder.parse(new FileInputStream(
"//path//to//sample.xml"));
XPath xPath = XPathFactory.newInstance().newXPath();
NodeList skus = (NodeList) xPath.compile("//SKUs").evaluate(xmlDocument, XPathConstants.NODESET);
for(int i=1;i<skus.getLength()+1;i++) {
String t1 = xPath.compile("//SKUs["+i+"]/Attributes[1]/name[1]").evaluate(xmlDocument);
String t2 = xPath.compile("//SKUs["+i+"]/Attributes[1]/Values/identifier[1]").evaluate(xmlDocument);
String t3 = xPath.compile("//SKUs["+i+"]/Attributes[2]/name[1]").evaluate(xmlDocument);
String t4 = xPath.compile("//SKUs["+i+"]/Attributes[2]/Values/identifier[1]").evaluate(xmlDocument);
String id = xPath.compile("//SKUs["+i+"]/SKUUniqueID").evaluate(xmlDocument);
System.out.println(t1+","+t2+","+t3+","+t4+","+id);
}
}
}
另请注意,您的xml中不清楚值来自哪里,因为它们可能来自不同的地方。