【发布时间】:2025-12-24 21:30:17
【问题描述】:
好的,我一直在四处寻找,似乎找不到我的问题的答案。我正在使用 Perl 使用 XPATH 解析 XML 文件。文件的一部分,不知道子节点会取什么名字。例如:
<state xmlns="http://google.com" id=1>
<randomName1 type="boolean">0</randomName1>
</state>
<state xmlns="http://google.com" id=2>
<randomName2 type="boolean">1</randomName2>
</state>
因此,对于每个 randomName,我需要通过执行以下代码来获取我能够做到的名称(注意:我在父 foreach 语句中获取节点列表)。
my $elements = $nodes->getChildNodes;
foreach my $element(@$elements)
{
my $name = (lc($element->getName))
}
当我尝试获取值时,我的问题就出现了,我试图将 my $value = $element->string_value; 放入 foreach 循环中,而无论名称如何,所做的只是返回 0。我还尝试在 xpath string_value 语句中放置一个变量,但没有成功。
有没有办法将变量放入 xpath 表达式中?类似于(注意:这不起作用)我的$value = $element->find('$name')->string_value;?
抱歉,如果不清楚,我会尝试回答任何问题,但任何帮助将不胜感激,我已经花了更多时间试图解决这个问题。
【问题讨论】:
-
我是否正确假设您希望“randomName1”然后是“randomName2”在循环中的 $name 变量中?
-
是的,没错。如果我打印 "\n $name";变量声明后的语句,它打印子节点的正确名称。
-
您为此使用了哪些 perl 模块? XPath 在哪里?看起来您只是在使用 XML::DOM。
-
我没有使用 DOM,只是 XML::XPath
-
如果可能的话,您应该使用 XML::LibXML。 XML::XPath 更慢、更受限制且没有积极维护。