我的样本xml中有两个标签,如下所示,
<EmailAddresses>2</EmailAddresses>
<EmailAddresses>
<string>Allen.Patterson01@fantasyisland.com</string>
<string>Allen.Patterson12@fantasyisland.com</string>
</EmailAddresses>
如何基于子节点区分这两个xml标签,这意味着如何检查第一个标签没有子节点而另一个标签使用DOM php
答案 0 :(得分:0)
希望它能满足您的要求。只需复制,粘贴并运行即可。并根据需要更改/添加逻辑。
select * from db.tab1
where PROCESS_DT <= (select max(PROCESS_DT) - interval '72' month from db.tab1
答案 1 :(得分:0)
您可以使用set(['position = position + 1']);
:
->getElementsByTagName( 'string' )
foreach( $dom->getElementsByTagName( 'EmailAddresses' ) as $node )
{
if( $node->getElementsByTagName( 'string' )->length )
{
// Code for <EmailAddresses><string/></EmailAddresses>
}
else
{
// Code for <EmailAddresses>2</EmailAddresses>
}
}
被视为2
子节点,因此在您的XML <EmailAddresses>
中始终返回->haschildNodes()
。
由于您的奇怪的XML结构概念,您有这个问题。 如果您没有特别的理由维护此XML语法,我建议您只使用一个标记:
True
答案 2 :(得分:0)
Xpath允许你这样做。
$xml = <<<'XML'
<xml>
<EmailAddresses>2</EmailAddresses>
<EmailAddresses>
<string>Allen.Patterson01@fantasyisland.com</string>
<string>Allen.Patterson12@fantasyisland.com</string>
</EmailAddresses>
</xml>
XML;
$document = new DOMDocument();
$document->loadXml($xml);
$xpath = new DOMXpath($document);
var_dump(
$xpath->evaluate('number(//EmailAddresses[not(*)])')
);
foreach ($xpath->evaluate('//EmailAddresses/string') as $address) {
var_dump($address->textContent);
}
输出:
float(2)
string(35) "Allen.Patterson01@fantasyisland.com"
string(35) "Allen.Patterson12@fantasyisland.com"
获取第一个EmailAddresses
节点,不带任何元素节点子节点作为数字。
EmailAddresses
元素节点://EmailAddresses
//EmailAddresses[not(*)]
EmailAddresses
节点转换为数字:number(//EmailAddresses[not(*)])
获取string
个元素节点的EmailAddresses
个子节点。
EmailAddresses
元素节点://EmailAddresses
string
子节点://EmailAddresses/string
在您的示例中,第一个EmailAddresses
似乎是重复信息并以奇怪的方式存储。 Xpath也可以计算节点数。表达式count(//EmailAddresses/string)
将返回节点数。