PowerShell У меня есть XML-документ, отформатированный как это:доступ #text имущества XmlAttribute в
<root>
<obj>
<indexlist>
<index name="NUMD" value="val1" />
<index name="DATE" value="val2" />
</indexlist>
</obj>
</root>
Теперь я хотел бы изменить атрибут значение индекса элемента, в котором имя задано значение «DATE». Я получаю атрибут, как это:
$attr = $xml.selectnodes("//obj/indexlist/index[@name='DATE']/@value")
можно просмотреть значение, введя следующее:
$attr.'#text'
, но я не могу изменить его:
$attr.'#text' = 'foo'
The property '#text' cannot be found on this object. Verify that the property exists and can be set.
At line:1 char:1
+ $n.'#text' = 'foo'
+ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : PropertyAssignmentException
Как изменить значение XMLAttribute?
Я хотел бы также придерживаться XPath возвращения атрибут непосредственно, если это возможно, так как конечный пользователь этого сценария будет определять элементы и атрибуты для изменения в файле конфигурации с помощью XPath.
При использовании XPath для атрибутов пользователь может просто предоставить атрибут для изменения, а будущее значение - всего двумя аргументами: XPath и значением.
На самом деле проблема заключалась в том, что я использовал 'selectnodes' вместо' selectsinglenode', как вы. когда я просто echo'd моя '$ attr' powershell покажет мне значение' # text' каждый раз и также скажет, что возвращаемый тип является XmlAttribute, если я сделал '$ attr | gm'. но на самом деле возвращаемым типом кажется arrair или collection, который, конечно же, не имеет свойства 'value'. используя мой подход с '$ attr [0] .value' вместо' $ attr.value' также работает, но это был ваш ответ и использование 'selectsinglenode', который привел меня в правильном направлении;) спасибо :) – wullxz