Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中使用xpath从具有多个命名空间的xml文件中提取值_Java_Xml_Xpath - Fatal编程技术网

在java中使用xpath从具有多个命名空间的xml文件中提取值

在java中使用xpath从具有多个命名空间的xml文件中提取值,java,xml,xpath,Java,Xml,Xpath,我试图用java中的多个名称空间提取节点值,但没有成功。xml文件如下所示: <ns26:start xmlns:ns26="http://www.tektronix.com/iris/isa/capture/start" xmlns:ns31="http://www.tektronix.com/iris/isa/filters" xmlns:ns13="http://www.tektronix.com/iris/

我试图用java中的多个名称空间提取节点值,但没有成功。xml文件如下所示:

<ns26:start xmlns:ns26="http://www.tektronix.com/iris/isa/capture/start"  
            xmlns:ns31="http://www.tektronix.com/iris/isa/filters"            
            xmlns:ns13="http://www.tektronix.com/iris/isa/monitoredObjects"  
            xmlns:ns6="http://www.tektronix.com/iris/isa"  
            xmlns:ns10="http://www.tektronix.com/iris/isa/monNodeObjects" 
            xmlns:ns7="http://www.tektronix.com/iris/isa/capture/monitoredElements" 
            xmlns:ns11="http://www.tektronix.com/iris/isa/pointcodes" 
            xmlns:ns8="http://www.tektronix.com/iris/isa/capture/captureSession" 
            xmlns:ns2="http://www.tektronix.com/iris/isa/sessionSaveInfo" 
            xmlns:ns4="http://www.tektronix.com/iris/isa/customData" 
            xmlns:ns3="http://www.tektronix.com/iris/isa/manifest">
    <ns6:Id>LAB:11300/isaclient;440</ns6:Id>
</ns26:start>

表达式
/*[local-name()='start']/*[local-name()='Id']
有效,对于示例文档,结果节点列表中应包含一个节点


但是您应该使用
nodes.item(i).getTextContent()
来检索节点内容,因为
getNodeValue()
为元素节点返回
null

是的,这正是我正在做的,但没有成功。即使我将表达式更改为/*[local-name()='start'],仍然找不到节点。@KevinChen您的原始表达式不包含星号。不管怎样,这个表达式是有效的,所以一定是出了什么问题——当您运行xpath时,您的代码中可能有一个bug?我在最初的帖子中发布了java代码。ThanksGood catch,但是nodes.length()返回0。没有匹配的节点。所以没有要迭代的节点。@KevinChen我在本地运行了您的示例,没有问题。刚才使用了一个“InputSource”,指向本地文件和问题中的常量表达式。因此,还有其他问题。祝你好运
public static List<String> getXPathValueNamespace(String xml, String expression throws ParserConfigurationException, SAXException, IOException, XPathExpressionException 
{
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

    factory.setNamespaceAware(true);

    DocumentBuilder builder;

    Document doc = null;

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

    builder = factory.newDocumentBuilder();
    InputSource source = new InputSource(new StringReader(xml));

    doc = builder.parse(source);

    // Create XPathFactory object
    XPathFactory xpathFactory = XPathFactory.newInstance();

    // Create XPath object
    XPath xpath = xpathFactory.newXPath();
    XPathExpression expr = xpath.compile(expression);
    NodeList nodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
    for (int i = 0; i < nodes.getLength(); i++)
        list.add(nodes.item(i).getNodeValue());

    return list;
}