gpt4 book ai didi

xml - Powershell HasChildNodes是否适用于文本?

转载 作者:行者123 更新时间:2023-12-03 00:34:01 24 4
gpt4 key购买 nike

在Powershell中使用XML对象时,如果元素只是具有文本数据而不是另一个元素,则HasChildNodes是否应返回true?有没有办法识别下面没有任何实际元素的元素?

给定下面的示例,我希望元素Parameter_Section对于有子元素将返回true,但是我不希望内部的元素在有数据的情况下也返回true。例如,SCM_Included,SendToApp和WF_Start都返回true,因为它们具有文本。定义为“获取一个值,该值指示此节点是否具有任何子节点”。这是否意味着文本或数据被视为子节点?

我正在解析一堆InfoPath XML文件,希望能够忽略诸如Parameter_Section之类的父元素,这些父元素仅用于组织(InfoPath称其为“节”)实际存储数据的子元素(InfoPath中的字段) )。

function ReadAllNodes ($node) {
foreach ($childnode in $node.ChildNodes)
{
[string] $path = Get-XPath($childnode)
[string] $nt = $childnode.NodeType
[string] $hc = $childnode.HasChildNodes
[string] $name = $childnode.Name
[string] $val = $childnode.Value
[string] $txt = $childnode.'#text'

Write-Host (“Name={0}, path={1}, type={2}, hc={3}, val={4}, txt={5}” -f $name, $path, $nt, $hc,$val,$txt)
}

foreach ($cn in $childnode) {
ReadAllNodes $cn
}
}

$Xml = @"
<?xml version="1.0" encoding="utf-8"?>
<myFields>
<Parameter_Section>
<Approval_Mode />
<SCM_Included>n</SCM_Included>
<ApprovalCompleteDateTime />
<ApprovalCompleteDateStr />
<SendToApp>No</SendToApp>
<WF_Start>0</WF_Start>
<QuoteAttachCount>0</QuoteAttachCount>
<TestEmail />
<TestMessage />
<IsCurrentUserRequestor>true</IsCurrentUserRequestor>
<CanCurrentUserApprove>Approve</CanCurrentUserApprove>
</Parameter_Section>
</myFields>
"@

$content = New-Object -TypeName XML
$content.LoadXml($Xml)
[System.Xml.XmlElement] $root = $content.get_DocumentElement()

ReadAllNodes $root





Name=Parameter_Section, path=/myFields/Parameter_Section, type=Element, hc=True, val=, txt=
Name=Approval_Mode, path=/myFields/Parameter_Section/Approval_Mode, type=Element, hc=False, val=, txt=
Name=SCM_Included, path=/myFields/Parameter_Section/SCM_Included, type=Element, hc=True, val=, txt=n
Name=ApprovalCompleteDateTime, path=/myFields/Parameter_Section/ApprovalCompleteDateTime, type=Element, hc=False, val=, txt=
Name=ApprovalCompleteDateStr, path=/myFields/Parameter_Section/ApprovalCompleteDateStr, type=Element, hc=False, val=, txt=
Name=SendToApp, path=/myFields/Parameter_Section/SendToApp, type=Element, hc=True, val=, txt=No
Name=WF_Start, path=/myFields/Parameter_Section/WF_Start, type=Element, hc=True, val=, txt=0
Name=QuoteAttachCount, path=/myFields/Parameter_Section/QuoteAttachCount, type=Element, hc=True, val=, txt=0
Name=TestEmail, path=/myFields/Parameter_Section/TestEmail, type=Element, hc=False, val=, txt=
Name=TestMessage, path=/myFields/Parameter_Section/TestMessage, type=Element, hc=False, val=, txt=
Name=IsCurrentUserRequestor, path=/myFields/Parameter_Section/IsCurrentUserRequestor, type=Element, hc=True, val=, txt=true
Name=CanCurrentUserApprove, path=/myFields/Parameter_Section/CanCurrentUserApprove, type=Element, hc=True, val=, txt=Approve
Name=#text, path=/myFields/Parameter_Section/CanCurrentUserApprove/#text, type=Text, hc=False, val=Approve, txt=

最佳答案

Does that mean text or data is considered a child node?



是的,确实如此。
<CanCurrentUserApprove>节点内的字符串“Approve”本身就是 XmlText节点。如您所料,可以通过 ChildNodes属性访问文本节点。

请尝试以下示例:
$content.SelectNodes('//CanCurrentUserApprove')[0].ChildNodes[0]

关于xml - Powershell HasChildNodes是否适用于文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50669395/

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