针对 XHTML 使用 Saxon XPath 避免名称空间前缀
Avoiding namespace prefixes with Saxon XPath against XHTML
使用 Saxon HE 9.6 作为 JAXP 实现
有一个带有 XHTML 命名空间的 HTML 文档
//*:title
returns 期望值,但 //title
不是
我真的很想用 //title
。如何做到这一点?
或者,我可以只从已构建的文档中删除名称空间吗?
参见 https://saxonica.plan.io/boards/3/topics/1649,您可以将您从 Saxon XPathFactory 实现创建的 JAXP XPath
对象转换为 net.sf.saxon.xpath.XPathEvaluator
,然后使用例如 XPath 评估设置默认的 XPath 名称空间
((XPathEvaluator)xpath).getStaticContext().setDefaultElementNamespace("http://www.w3.org/1999/xhtml");
然后一个路径//title
将selecttitle
个XHTML命名空间中的元素。我测试了它在样本中的工作
XPathFactory xpathFactory = new XPathFactoryImpl();
XPath xpath = xpathFactory.newXPath();
((XPathEvaluator)xpath).getStaticContext().setDefaultElementNamespace("http://www.w3.org/1999/xhtml");
String xhtmlSample = "<html xmlns='http://www.w3.org/1999/xhtml'><head><title>This is a test</title></head><body><h1>Test</h1></body></html>";
InputSource source = new InputSource(new StringReader(xhtmlSample));
System.out.println("Found: " + xpath.evaluate("//title", source));
使用 Saxon HE 9.6 作为 JAXP 实现
有一个带有 XHTML 命名空间的 HTML 文档
//*:title
returns 期望值,但 //title
不是
我真的很想用 //title
。如何做到这一点?
或者,我可以只从已构建的文档中删除名称空间吗?
参见 https://saxonica.plan.io/boards/3/topics/1649,您可以将您从 Saxon XPathFactory 实现创建的 JAXP XPath
对象转换为 net.sf.saxon.xpath.XPathEvaluator
,然后使用例如 XPath 评估设置默认的 XPath 名称空间
((XPathEvaluator)xpath).getStaticContext().setDefaultElementNamespace("http://www.w3.org/1999/xhtml");
然后一个路径//title
将selecttitle
个XHTML命名空间中的元素。我测试了它在样本中的工作
XPathFactory xpathFactory = new XPathFactoryImpl();
XPath xpath = xpathFactory.newXPath();
((XPathEvaluator)xpath).getStaticContext().setDefaultElementNamespace("http://www.w3.org/1999/xhtml");
String xhtmlSample = "<html xmlns='http://www.w3.org/1999/xhtml'><head><title>This is a test</title></head><body><h1>Test</h1></body></html>";
InputSource source = new InputSource(new StringReader(xhtmlSample));
System.out.println("Found: " + xpath.evaluate("//title", source));