Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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
使用XPath解析XML&;Java中的名称空间_Java_Xml_Xpath - Fatal编程技术网

使用XPath解析XML&;Java中的名称空间

使用XPath解析XML&;Java中的名称空间,java,xml,xpath,Java,Xml,Xpath,你能帮我调整一下代码,让它能够解析XML吗?如果删除XML名称空间,它将起作用: String webXmlContent = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<foo xmlns=\"http://foo.bar/boo\"><bar>baz</bar></foo>"; DocumentBuilderFactory dom

你能帮我调整一下代码,让它能够解析XML吗?如果删除XML名称空间,它将起作用:

String webXmlContent = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
                       "<foo xmlns=\"http://foo.bar/boo\"><bar>baz</bar></foo>";
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true);
DocumentBuilder builder = domFactory.newDocumentBuilder();
org.w3c.dom.Document doc = builder.parse(new StringInputStream(webXmlContent));

NamespaceContextImpl namespaceContext = new NamespaceContextImpl();
namespaceContext.startPrefixMapping("foo", "http://www.w3.org/2001/XMLSchema-instance");
XPath xpath = XPathFactory.newInstance().newXPath();
xpath.setNamespaceContext(namespaceContext);

XPathExpression expr = xpath.compile("/foo/bar");
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
System.out.println("Got " + nodes.getLength() + " nodes");
String webXmlContent=“\n”+
“baz”;
DocumentBuilderFactory domFactory=DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true);
DocumentBuilder=domFactory.newDocumentBuilder();
org.w3c.dom.Document doc=builder.parse(新的StringInputStream(webXmlContent));
NamespaceContextImpl namespaceContext=新的NamespaceContextImpl();
namespaceContext.startPrefixMapping(“foo”http://www.w3.org/2001/XMLSchema-instance");
XPath=XPathFactory.newInstance().newXPath();
setNamespaceContext(namespaceContext);
XPathExpression expr=xpath.compile(“/foo/bar”);
Object result=expr.evaluate(doc,XPathConstants.NODESET);
节点列表节点=(节点列表)结果;
System.out.println(“Got”+节点.getLength()+节点”);
  • 您必须在XPath中使用前缀,例如。g、 :“/my:foo/my:bar”您可以选择任何您喜欢的前缀-它与您在XML文件中使用或未使用的前缀无关-但您必须选择一个。这是XPath 1.0的一个限制

  • 您必须执行从“我的”到“”的前缀映射(而不是到“”)