首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在jxpath中使用text()

如何在jxpath中使用text()
EN

Stack Overflow用户
提问于 2012-11-16 05:47:27
回答 2查看 597关注 0票数 0

你能得到jxpath元素的text()吗?或者它不能工作?

给出一些很好的xml:

代码语言:javascript
复制
<?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>

//不起作用:

代码语言:javascript
复制
jxpc.getValue("/AXISWeb/Action/PingPOS[1]/PingStep/text()");

//不起作用:

代码语言:javascript
复制
jxpc.getValue("/action/pingPOS[1]/PingStep/text()");

//不起作用:

代码语言:javascript
复制
jxpc.getValue("/action/pingPOS[1]/PingStep[text()]");

我知道我可以通过使用

代码语言:javascript
复制
jxpc.getValue("/action/pingPOS[1]/PingStep");

但这不是重点。text()不应该工作吗?我找不到任何例子...

附注:它对大小写和大小写也非常挑剔。你能不能把它关掉?

谢谢,-G

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-16 05:59:53

/AXISWeb/Action/PingPOS[1]/PingStep/text()是文档的有效XPath

但是,根据我在jxpath的用户指南中所看到的(注意:我根本不知道jxpath ),getValue()应该已经返回了节点的文本内容,所以您根本不需要使用XPath text()

因此,您可以使用以下内容:

代码语言:javascript
复制
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(),但这并不是真正推荐的,你最好使用正确的名称。

代码语言:javascript
复制
/*[lower-case(node())='axisweb']/*[lower-case(node())='action']/...

或者,如果使用XPath 1,您可能会使用translate(),但情况会变得更糟:

代码语言:javascript
复制
/*[translate(node(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz') = 'axisweb']/*[translate(node(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz') = 'action']/...

总而言之,尽量确保你使用了正确的查询,你知道它是大小写敏感的,所以最好注意它。与在Java语言中一样,foofOo是不同的变量。

编辑:

正如我所说的,XML和XPath是区分大小写的,所以pingStep不能匹配PingStep,请使用正确的名称来查找它。

关于text(),它是XPath 1.0的一部分,XPath 2不需要使用它。JXPath getValue()已经在为您调用text()。如果您希望自己执行此操作,则必须使用selectSingleNode("//whatever/text()"),它将返回TextElement类型的Object (取决于底层解析器)。

总之,方法XPath已经为您选择了节点的文本内容,所以您不需要自己选择,也不需要显式地调用JXPathContext.getValue()text()

票数 2
EN

Stack Overflow用户

发布于 2012-12-06 04:32:04

在使用.getTextContent()方法之前,我在一篇文章中为您做了这项工作。在计算Xpath时,不需要使用"text()“。

示例:

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13406801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档