使用xpath提取值列表

时间:2014-09-16 22:45:03

标签: xpath

有没有办法可以提取数据,以便输出如下?

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>

1 个答案:

答案 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中不清楚值来自哪里,因为它们可能来自不同的地方。