gpt4 book ai didi

来自 textContent 的 Perl LibXML 原始数据?

转载 作者:行者123 更新时间:2023-12-04 18:22:47 32 4
gpt4 key购买 nike

给定以下 XML:

<?xml version="1.0" encoding="utf-8" ?> 
<Request>
<form_submit>
<form_submit id = 1424>
<form_id>1424</form_id>
<field1 id=’5’> <![CDATA[ test ]]> </field1>
<field2 id=’6’> <![CDATA[ test2 ]]> </field2>
</form_submit>
</form_submit>
</Request>

我正在尝试获取 field1 和 field2 元素的原始值。我正在使用以下代码:
foreach my $node ( $xml_request->findnodes('Request/*/*/*[@id]') )
{
my $form_field_value = $node->textContent;
print "Value:\"$form_field_value\"\n";
}

但输出是:
Value:" test   "
Value:" test2 "

如何使用所有特殊字符检索原始数据和原样的确切数据?所以输出是:
Value:" <![CDATA[ test   ]]>   "
Value:" <![CDATA[ test2 ]]> "

谢谢你。

最佳答案

我不是 libxml 专家。
然而,这是我在玩了你的 xml 和 libxml 之后可以弄清楚的。
CDATA 是一个节点/部分,不是文本的一部分。
下面的代码深入一层并为 cdata 子节点执行 toString()
和其他节点的 textContent。

foreach my $node ( $xml_request->findnodes('Request/*/*/*[@id]') )
{
my $text;
if($node->childNodes) {
foreach my $child ($node->childNodes()) {
if ($child->nodeType == XML::LibXML::XML_CDATA_SECTION_NODE) {
$text .= $child->toString;
} else {
$text .= $child->textContent;
}
}
} else {
$text = $node->textContent;
}
print qq{"$text"\n};
}

将打印
" <![CDATA[ test   ]]>   "
" <![CDATA[ test2 ]]> "

关于来自 textContent 的 Perl LibXML 原始数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10322536/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com