xpath访问节点中的信息
我需要从一个包含物业详细信息的网站上删除信息xpath访问节点中的信息,xpath,xpath-2.0,Xpath,Xpath 2.0,我需要从一个包含物业详细信息的网站上删除信息 <div class="inner"> <div class="col"> <h2><a href="house-in-digana-for-sale-kandy-32">House in Digana </a></h2> <div class="meta"> <div class="date"></div> &
<div class="inner">
<div class="col">
<h2><a href="house-in-digana-for-sale-kandy-32">House in Digana </a></h2>
<div class="meta">
<div class="date"></div>
<span class="category">Houses</span>,
<span class="location">Kandy</span>
</div>
</div>
<div class="attr polar">
<span class="data">Rs. 3,600,000</span>
</div>
房屋,
康迪
3600000卢比
“Kandy”和“Rs.3600000”的xpath表示法是什么 直接使用
text()
处理文本节点是不明智的,因为XML文档中存在细微差别
相反,寻址元素节点直接返回所有子代文本节点的串联作为元素值,这是人们通常想要的(并且在寻址文本节点时认为他们得到了)
我在课堂上使用的典型示例是OCR内容作为XML的示例:
<cost>39<!--that 9 may be an 8-->.22</cost>
39.22
使用XPath地址cost
的元素的值为“39.22”,但在XSLT 1.0中,XPath地址cost/text()
的值为“39”,这是不完整的。在XSLT2.0中(问题是如何标记的),您会得到两个文本节点“39”和“.22”,如果将它们连接起来,看起来是正确的。但是,如果您将它们传递给需要单例参数的函数,您将得到一个运行时错误。对元素寻址时,返回的文本将连接到单个字符串中,该字符串适用于单例参数
我告诉学生们,在我所有的专业工作中,只有很少(非常!)次我必须在样式表中使用text()
因此
//span[@class='location'或@class='data']
将找到这两个字段,如果这两个字段是整个文档中唯一的此类元素。您可能需要从文档树内部的某个位置使用“//span”。直接使用text()
来寻址文本节点是不明智的,因为XML文档中存在细微差别
相反,寻址元素节点直接返回所有子代文本节点的串联作为元素值,这是人们通常想要的(并且在寻址文本节点时认为他们得到了)
我在课堂上使用的典型示例是OCR内容作为XML的示例:
<cost>39<!--that 9 may be an 8-->.22</cost>
39.22
使用XPath地址cost
的元素的值为“39.22”,但在XSLT 1.0中,XPath地址cost/text()
的值为“39”,这是不完整的。在XSLT2.0中(问题是如何标记的),您会得到两个文本节点“39”和“.22”,如果将它们连接起来,看起来是正确的。但是,如果您将它们传递给需要单例参数的函数,您将得到一个运行时错误。对元素寻址时,返回的文本将连接到单个字符串中,该字符串适用于单例参数
我告诉学生们,在我所有的专业工作中,只有很少(非常!)次我必须在样式表中使用text()
因此
//span[@class='location'或@class='data']
将找到这两个字段,如果这两个字段是整个文档中唯一的此类元素。您可能需要从文档树中的某个位置使用“//span”。您的利用是正确的,而且是一个很好的利用(!),但很容易被误解。“但是在XSLT1.0中,XPath地址cost/text()的值是“39”,这一点很重要。即使在xpaht-1.0中,cost/text()
的XPATH结果也是所有直接子文本节点的列表。其中,xsl:value of
将只返回第一个,但的副本将
返回全部。谢谢,hr_117,是的。我假设原始海报和大多数人一样使用。但我对XSLT2.0的警告肯定适用:如果XPath地址用作函数的第一个参数,如contains()
,则会出现运行时错误,因为第一个参数不是单例。我告诉学生们的观点是“如果你认为你需要使用text()
,那么再想想,因为你可能不会“更多地考虑这个问题,在XSLT1中,contains(cost,'2')
返回true,contains(cost/text(),'2')
返回false,在XSLT2中,contains(cost/text(),'2'))
返回一个运行时错误,转换中止。您的攻击是正确的,是一个很好的(!),但很容易被误解。“但是在XSLT1.0中,XPath地址cost/text()的值是“39”,这一点很重要。即使在xpaht-1.0中,cost/text()
的XPATH结果也是所有直接子文本节点的列表。其中,xsl:value of
将只返回第一个,但的副本将
返回全部。谢谢,hr_117,是的。我假设原始海报和大多数人一样使用。但我对XSLT2.0的警告肯定适用:如果XPath地址用作函数的第一个参数,如contains()
,则会出现运行时错误,因为第一个参数不是单例。我告诉学生们的观点是“如果你认为你需要使用text()
,那么再想想,因为你可能不会“更多地考虑这个问题,在XSLT1中,contains(cost,'2')
返回true,contains(cost/text(),'2')
返回false,在XSLT2中,contains(cost/text(),'2'))
返回运行时错误,转换异常终止。