【问题标题】:Xpath removing spaces in between textXpath 删除文本之间的空格
【发布时间】:2012-08-11 11:17:03
【问题描述】:

我正在使用以下 XPath 从 html 页面中挑选一些数据。我要选择的值之间有一些空格:

example=value1    value2       value3

我的 XPath 表达式正在选择值,但会删除文本之间的额外空格,如下所示:

value1 value2 value3

如何确保不会删除多余的空格?

我的 xpath:

//*something/div/input[1]/@value

我从中挑选值的示例 HTML:

<input type="radio" name='radio1' value="R92392   12132                           sdlasldkaskl                  " id='some' >

请注意,我得到的值为R92392 12132 sdlasldkaskl。但我希望保留文本之间的空格。

【问题讨论】:

  • 你能提供一些示例 XML 输入吗?
  • 这不是 xpath 的问题。 Xpath 是正确的,我正在获取文本值,但它正在剥离文本之间的空格。
  • user743914,请编辑问题并具体说明您想要得到什么——人们没有兴趣猜测。
  • 愚蠢的问题,但您是否在浏览器中以 HTML 格式查看文本?这可能会出现您所看到的“未保留空间”问题。尝试“查看源代码”页面。

标签: php html parsing xpath html-parsing


【解决方案1】:

我的 XPath 引擎没有删除空格,所以它一定是由于 PHP 设置造成的。我不确定您的情况,因为您没有提供太多代码,但以下可能对您有用:

$doc->preserveWhiteSpace = true; // This setting should fix it
$doc->Load('document.xml');
$xpath = new DOMXPath($doc);
$query = '//div/input[1]/@value';

【讨论】:

  • 不,它是文本之间的空格..值就像:text1 text2 text3。 Xpath 正在返回 text1 text2 text3。我希望保留它们之间的空格。
  • @user743914,Xpath 不是“返回 text1 text2 text3”。如我的回答所示,XPath 表达式的评估产生了value 属性的未更改字符串值。您向我们展示了一个语法上非法的 XPath 表达式,但您没有向我们展示您想要获得的结果——真的,没有帮助。
  • 问题出在 Sicco 识别的 php 配置上。创建 domDocument 的类正在使用此选项 $doc->preserveWhiteSpace = false;
  • 真的吗?令人惊讶的是,不保留空格通常只会删除空格节点(例如 XML 源的缩进),它通常不会影响属性值中的多个空格。
  • 我无法重现此问题,即使手动将preserveWhiteSpace 设置为false。始终保留空格。
猜你喜欢
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 2015-07-30
  • 1970-01-01
  • 1970-01-01
  • 2013-08-29
  • 2019-01-31
  • 2017-08-24
相关资源
最近更新 更多