Ruby 从XML文件中提取特定节点

Ruby 从XML文件中提取特定节点,ruby,xml,node.js,xpath,Ruby,Xml,Node.js,Xpath,我只想在Ruby中使用doc.xpath从XML文件中提取body节点/标记 要从XML文件中提取的节点: <wcm:element name="Body">&lt;p&gt;A new study suggests that &lt;a href="ssNODELINK/SmokingAndCancer"&gt;tobacco&lt;/a&gt; companies may be using online video portals,

我只想在Ruby中使用doc.xpath从XML文件中提取body节点/标记

要从XML文件中提取的节点:

<wcm:element name="Body">&lt;p&gt;A new study suggests that &lt;a href="ssNODELINK/SmokingAndCancer"&gt;tobacco&lt;/a&gt; companies may be using online video portals, such as YouTube, to get around advertising restrictions and market their products to young people.&lt;/p&gt;
</wcm:element>
但这会提取每个节点的所有内容

然后我试了一下:

page_content = doc.xpath("/wcm:root/wcm:element/Body")
但是不起作用


有人对如何在Ruby中使用doc.xpath精确提取XML文件的正文部分有什么建议吗?

我不是100%确定我理解了你的意思,但是……我们不要因此而停止。您希望从输入中获取特定节点的内容。您的第一条XPath语句:

/wcm:root/wcm:element
正在提取名为
wcm:element
的每个元素,该元素是根元素
wcm:root
元素的子元素

你的第二个:

/wcm:root/wcm:element/Body
类似,但查找名为
Body
的元素,这些元素是
wcm:element
的子元素

您需要的是获取
wcm:element
元素的值,其中属性
name
设置为值
Body
。您可以通过在XPath中使用
@
符号作为前缀来访问属性,并表示您使用的where条件
[…]
-谓词。XPath语句需要:

/wcm:root/wcm:element[@name='Body']

我假设您的XPath执行环境对于名称空间前缀(wcm)是良好的,因为您说您的第一个查询返回了内容

wcm:element
元素是否是
wcm:root
元素的直接子元素?如果没有,请尝试
/wcm:root//wcm:element[@name='Body']
/
意味着XPath遵循子体轴并向下查看文档树到任何级别。如果可以,发布更多的XML怎么样?此外,您可能需要声明正在使用的名称空间。
page_content = doc.xpath("/wcm:root/wcm:element/Body")