问题描述
一周以来,我一直在尝试将 XML 节点附加到父 XML 元素。子节点和父节点如下所示:
[xml]$childxml = @"
<ClaimsProvider>
<Bomain> hey there</Bomain>
<Name>Login using </Name>
<TechnicalProfiles>
<TechnicalProfile Id="MIDC-What">
<displayName> Employee</displayName>
<Description>Login with your account</Description>
<Protocol Name="OpenIdConnect" />
<Metadata>
<Item Key="MetaDATA">https://login.microsoftonline.com</Item>
<Item Key="client_id">Mangal</Item>
<Item Key="ValidTokenIssuerPrefixes">https://login.microsoftonline.com</Item>
</Metadata>
<Cryptograph>
<Key Id="client_secret" StorageReferenceId="key" />
</Cryptograph>
<IncludeTechnicalProfile ReferenceId="MIDC-Shared" />
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
"@
我想把这个子节点添加到这个文件中(文件名:permissions.xml
)
<TrustFrameworkPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"">
<BasePolicy>
</BasePolicy>
<BuildingBlocks></BuildingBlocks>
<ClaimsProviders>
<ClaimsProvider>
<Bomain> hey there 1</Bomain>
<Name>Login using </Name>
<TechnicalProfiles>
<TechnicalProfile Id="MIDC-What">
<displayName> Employee</displayName>
<Description>Login with your account</Description>
<Protocol Name="OpenIdConnect" />
<Metadata>
<Item Key="MetaDATA">https://login.microsoftonline.com</Item>
<Item Key="client_id">Mangal</Item>
<Item Key="ValidTokenIssuerPrefixes">https://login.microsoftonline.com</Item>
</Metadata>
<Cryptograph>
<Key Id="client_secret" StorageReferenceId="key" />
</Cryptograph>
<IncludeTechnicalProfile ReferenceId="MIDC-Shared" />
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
<ClaimsProvider>
<Bomain> hey there 2</Bomain>
<Name>Login using </Name>
<TechnicalProfiles>
<TechnicalProfile Id="MIDC-What">
<displayName> Employee</displayName>
<Description>Login with your account</Description>
<Protocol Name="OpenIdConnect" />
<Metadata>
<Item Key="MetaDATA">https://login.microsoftonline.com</Item>
<Item Key="client_id">Mangal</Item>
<Item Key="ValidTokenIssuerPrefixes">https://login.microsoftonline.com</Item>
</Metadata>
<Cryptograph>
<Key Id="client_secret" StorageReferenceId="key" />
</Cryptograph>
<IncludeTechnicalProfile ReferenceId="MIDC-Shared" />
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
<ClaimsProvider>
<Bomain> hey there 3</Bomain>
<Name>Login using </Name>
<TechnicalProfiles>
<TechnicalProfile Id="MIDC-What">
<displayName> Employee</displayName>
<Description>Login with your account</Description>
<Protocol Name="OpenIdConnect" />
<Metadata>
<Item Key="MetaDATA">https://login.microsoftonline.com</Item>
<Item Key="client_id">Mangal</Item>
<Item Key="ValidTokenIssuerPrefixes">https://login.microsoftonline.com</Item>
</Metadata>
<Cryptograph>
<Key Id="client_secret" StorageReferenceId="key" />
</Cryptograph>
<IncludeTechnicalProfile ReferenceId="MIDC-Shared" />
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
</ClaimsProviders>
</TrustFrameworkPolicy>
我现在正在这样做:
- 将文档保存在变量中
$doc = [xml](Get-Content permissions.xml)
- 将子变量附加到 $doc xml
[Void]$doc.TrustFrameworkPolicy.ClaimsProviders.AppendChild($childxml)
我收到以下错误:
使用“1”参数调用“AppendChild”的异常:“指定的节点不能作为该节点的有效子节点插入,因为指定的节点类型错误。”
解决方法
您不能附加来自不同 XML 文档的 XmlNode
。相反,您必须从要附加到的文档创建一个节点:
$childxml = $doc.CreateDocumentFragment()
$childxml.InnerXml = @'
<ClaimsProvider>
<Bomain> hey there</Bomain>
<Name>Login using </Name>
<TechnicalProfiles>
<TechnicalProfile Id="MIDC-What">
<DisplayName> Employee</DisplayName>
<Description>Login with your account</Description>
<Protocol Name="OpenIdConnect" />
<Metadata>
<Item Key="METADATA">https://login.microsoftonline.com</Item>
<Item Key="client_id">Mangal</Item>
<Item Key="ValidTokenIssuerPrefixes">https://login.microsoftonline.com</Item>
</Metadata>
<Cryptograph>
<Key Id="client_secret" StorageReferenceId="key" />
</Cryptograph>
<IncludeTechnicalProfile ReferenceId="MIDC-Shared" />
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
'@
[Void]$doc.TrustFrameworkPolicy.ClaimsProviders.AppendChild($childxml)