我正在制作一部历史剧本,我对此知之甚少。
对象A的类型为system.xml.xmlelement
,我需要将其转换为system.xml.xmldocument
类型以与对象B进行比较(类型system.xml.xmldocument
)。
脚本当前尝试执行直接转换,其中包含:
无法将值
System.Xml.XmlElement
转换为System.Xml.XmlDocument
类型。错误:"指定的节点无法作为此节点的有效子节点插入,因为指定的节点类型错误。"
我想我需要创建一个新的system.xml.xmldocument
对象并将对象A中的节点导入到新对象中,然后使用对象B对新对象进行比较。我正在努力解决问题语法,加上我不确定这是正确的方法。
任何指导或帮助都将不胜感激。
对象A(xmlElement)如下所示:
<Resource xmlns="http://schemas.microsoft.com/windowsazure">
<ResourceProviderNamespace>cacheservice</ResourceProviderNamespace>
<Type>Caching</Type>
<Name>xxx</Name>
<SchemaVersion>1.0</SchemaVersion>
<ETag>xxx</ETag>
<State>Started</State>
<SubState>Active</SubState>
<UsageMeters />
<IntrinsicSettings>
<CacheServiceInput xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SkuType>Basic</SkuType>
<Location>North Europe</Location>
<SkuCount>1</SkuCount>
<ServiceVersion>1.3.0</ServiceVersion>
<ObjectSizeInBytes>1024</ObjectSizeInBytes>
<NamedCaches>
<NamedCache>
<CacheName>default</CacheName><NotificationsEnabled>false</NotificationsEnabled>
<HighAvailabilityEnabled>false</HighAvailabilityEnabled>
<EvictionPolicy>LeastRecentlyUsed</EvictionPolicy>
<ExpirationSettings>
<TimeToLiveInMinutes>10</TimeToLiveInMinutes>
<Type>Absolute</Type>
</ExpirationSettings>
</NamedCache>
</NamedCaches>
</CacheServiceInput>
</IntrinsicSettings>
<OutputItems>
<OutputItem>
<Key>CreationDate</Key>
<Value>9/30/2014 9:46:42 AM +00:00</Value>
</OutputItem>
</OutputItems>
<OperationStatus>
<Type>Create</Type>
<Result>Succeeded</Result>
</OperationStatus>
<Label />
</Resource>
对象B(xmldocument)如下所示:
<Resource>
<IntrinsicSettings>
<CacheServiceInput xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SkuType>Basic</SkuType>
<Location>North Europe</Location>
<SkuCount>1</SkuCount>
<ServiceVersion>1.3.0</ServiceVersion>
<ObjectSizeInBytes>134217728</ObjectSizeInBytes>
<NamedCaches>
<NamedCache>
<CacheName>default</CacheName>
<NotificationsEnabled>True</NotificationsEnabled>
<HighAvailabilityEnabled>True</HighAvailabilityEnabled>
<EvictionPolicy>True</EvictionPolicy><ExpirationSettings>
<TimeToLiveInMinutes>10</TimeToLiveInMinutes>
<Type>Absolute</Type>
</ExpirationSettings>
</NamedCache>
</NamedCaches>
</CacheServiceInput>
</IntrinsicSettings>
</Resource>
答案 0 :(得分:0)
我知道这是一个旧的,但由于没有人回答,我想在遇到类似问题后我会分享这个。基本上,您不能隐式地将XmlElement转换为XmlDocument,但您可以将其包装。以下语法只是这样做:
给出以下虚拟xml
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns="http://dummy">
<CommonRoles>
<Role>Role1</Role>
<Role>Role2</Role>
<Role>Role3</Role>
</CommonRoles>
<SomethingElse>
</SomethingElse>
</configuration>
我们可以获得一个子集并将其转换为文档,如下所示:
$value = [xml](Get-Content(Join-Path $filePath $roles[0]))
$commonRoles = $value.configuration.CommonRoles
$xml = New-Object -TypeName xml
$xml.AppendChild($xml.ImportNode($commonRoles, $true)) | Out-Null
在这种情况下,我们从文件中读取xml源,然后选择一个嵌套元素(CommonRoles),它成为我们的XmlElement对象。后续行将创建一个新的xml对象,并将XmlElement附加到该对象。我们需要使用ImportNode方法,因为xml当前属于另一个文档,因此您需要允许它成为新文档的一部分。
Out-Null的管道阻止对AppendChild的调用成为函数输出的一部分。