你能得到jxpath元素的text()吗?或者它不能工作?
给出一些很好的xml:
<?xml version="1.0" encoding="UTF-8"?>
<AXISWeb xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="AXISWeb.xsd">
<Action>
<Transaction>PingPOS</Transaction>
<PingPOS>
<PingStep>To POS</PingStep>
<PingDate>2012-11-15</PingDate>
<PingTime>16:35:57</PingTime>
</PingPOS>
<PingPOS>
<PingStep>POS.PROCESSOR18</PingStep>
<PingDate>2012-11-15</PingDate>
<PingTime>16:35:57</PingTime>
</PingPOS>
<PingPOS>
<PingStep>From POS</PingStep>
<PingDate>2012-11-15</PingDate>
<PingTime>16:35:57</PingTime>
</PingPOS>
</Action>
</AXISWeb>//不起作用:
jxpc.getValue("/AXISWeb/Action/PingPOS[1]/PingStep/text()");//不起作用:
jxpc.getValue("/action/pingPOS[1]/PingStep/text()");//不起作用:
jxpc.getValue("/action/pingPOS[1]/PingStep[text()]");我知道我可以通过使用
jxpc.getValue("/action/pingPOS[1]/PingStep");但这不是重点。text()不应该工作吗?我找不到任何例子...
附注:它对大小写和大小写也非常挑剔。你能不能把它关掉?
谢谢,-G
发布于 2012-11-16 05:59:53
/AXISWeb/Action/PingPOS[1]/PingStep/text()是文档的有效XPath
但是,根据我在jxpath的用户指南中所看到的(注意:我根本不知道jxpath ),getValue()应该已经返回了节点的文本内容,所以您根本不需要使用XPath text()。
因此,您可以使用以下内容:
jxpc.getValue("/AXISWeb/Action/PingPOS[1]/PingStep");从user guide中提取
考虑下面的XML文档:使用相同的XPath,
getValue("/address/street")将返回字符串"Orchard Road",而selectSingleNode("/address/street")-一个元素类型的对象(DOM或selectSingleNode("/address/street"),取决于所使用的解析器的类型)。返回的元素当然是<street>Orchard Road</street>。
现在关于不区分大小写的标签名称查询,如果你使用的是XPath 2,你可以使用lower-case()和node(),但这并不是真正推荐的,你最好使用正确的名称。
/*[lower-case(node())='axisweb']/*[lower-case(node())='action']/...或者,如果使用XPath 1,您可能会使用translate(),但情况会变得更糟:
/*[translate(node(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz') = 'axisweb']/*[translate(node(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz') = 'action']/...总而言之,尽量确保你使用了正确的查询,你知道它是大小写敏感的,所以最好注意它。与在Java语言中一样,foo和fOo是不同的变量。
编辑:
正如我所说的,XML和XPath是区分大小写的,所以pingStep不能匹配PingStep,请使用正确的名称来查找它。
关于text(),它是XPath 1.0的一部分,XPath 2不需要使用它。JXPath getValue()已经在为您调用text()。如果您希望自己执行此操作,则必须使用selectSingleNode("//whatever/text()"),它将返回TextElement类型的Object (取决于底层解析器)。
总之,方法XPath已经为您选择了节点的文本内容,所以您不需要自己选择,也不需要显式地调用JXPathContext.getValue()的text()。
发布于 2012-12-06 04:32:04
在使用.getTextContent()方法之前,我在一篇文章中为您做了这项工作。在计算Xpath时,不需要使用"text()“。
示例:
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File("D:\\Loic_Workspace\\Test2\\res\\test.xml"));
System.out.println(doc.getElementsByTagName("retCode").item(0).getTextContent());如果不是,您将获得标记和值。如果你想做更多事情,看看at this
https://stackoverflow.com/questions/13406801
复制相似问题