我有一个XML文件可以使用PowerShell进行编辑。
<?xml version="1.0" encoding="UTF-8"?>
<InitFile version="1.0">
<SecureReadOnlyFields value="true"/>
<file-browser>
<allow-upload value="true"/>
<root url="D:\Temp\"/>
<folder url="pa_wf"/>
<folder url="fsa"/>
<folder url="CG"/>
</file-browser>
<HibernateConfigurations>
<HibernateDefaultSecurityKey value="ATF"/>
<HibernateConfiguration name="USER_AUT_FRA_WFSE">
<session-factory>
<property name="connection.driver_class">xxxxxx</property>
<property name="connection.url">xxxxx</property>
<property name="connection.username">USER_AUT</property>
</session-factory>
读取XML文件的代码:
$inixml = (Get-Content -Path D:\init.xml)
$upinit = $inixml | ConvertTo-Xml
$node = $upinit.SelectNodes("//property")
代码的最后一行没有给出任何O / P。使用PowerShell和USER_AUT_PAR而不是USER_AUT来编辑包含“ connection.username”的行。
答案 0 :(得分:0)
您应该可以执行以下操作:
[xml]$x = get-content 'C:\Program Files\Common Files\microsoft shared\ink\Alphabet.xml
'
然后可以通过...访问xml文件中的每个项目
$x.alphabetFile
xmlns xsi schemaLocation trainer
----- --- -------------- -------
urn:schemas-microsoft-com:tabletpc:alphabet.v1 http://www.w3.org/2001/XMLSchema-instance urn:schemas-microsoft-com:tabletpc:alphabet.v1 Alphabet.xsd {trainer, traine...
等等等
答案 1 :(得分:0)
ConvertTo-Xml
并没有按照您认为的做。如果您实际看一下转换结果,将会看到以下内容:
PS C:\> $inixml.Save([Console]::Out) <?xml version="1.0" encoding="ibm850"?> <Objects> <Object Type="System.String"><?xml version="1.0" encoding="UTF-8"?></Object> <Object Type="System.String"><InitFile version="1.0"></Object> <Object Type="System.String"> <SecureReadOnlyFields value="true"/></Object> <Object Type="System.String"> <file-browser></Object> <Object Type="System.String"> <allow-upload value="true"/></Object> <Object Type="System.String"> <root url="D:\Temp\"/></Object> <Object Type="System.String"> <folder url="pa_wf"/></Object> <Object Type="System.String"> <folder url="fsa"/>& ...
说明
ConvertTo-Xml
cmdlet 创建一个或多个Microsoft .NET Framework对象的基于XML的表示形式 。要使用此cmdlet,请将一个或多个对象通过管道传递到cmdlet,或使用InputObject参数指定对象。
强调我的。
要正确加载XML数据,请使用以下方法:
$inixml = New-Object Xml
$inixml.Load('D:\init.xml')
然后,您将可以按预期选择<property>
节点:
PS C:\> $inixml.SelectNodes('//property') name #text ---- ----- connection.driver_class xxxxxx connection.url xxxxx connection.username USER_AUT