I have an xml document formated like this:
<root>
<obj>
   <indexlist>
      <index name="NUMD" value="val1" />
      <index name="DATE" value="val2" />
   </indexlist>
</obj>
</root>
now I'd like to change the value attribute of the index element where name is set to "DATE". I get the attribute like this:
$attr = $xml.selectnodes("//obj/indexlist/index[@name='DATE']/@value")
I can view the value by typing this:
$attr.'#text'
but I can't change it:
$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
how do I change the value of an XMLAttribute?
I'd also like to stick with XPath returning the attribute directly if that's possible because the end-user of that script will define the elements and attributes to change in a config file using XPath.
While using XPath for the attributes as well the user can simply provide the attribute to change and the future-value with just two arguments: the XPath and the value.
1 : the right or ability to approach, enter, or use Only a few have access to the secret information. 2 : a way or means of approaching access to the sea. access. verb. accessed; accessing.
An example of access is permission to enter a secure area. The ability, opportunity, permission, or right to approach, communicate, enter, pass to and from, or view without interference or obstruction.
Word family (noun) access accessibility ≠ inaccessibility (adjective) accessible ≠ inaccessible (verb) access (adverb) accessibly ≠ inaccessibly.
admission, admittance, entry, entrée, ingress, right of entry, permission to enter, the opportunity to enter.
Besides #text, you can also access XmlAttribute's value via Value property :
$attr = $xml.SelectSingleNode("//obj/indexlist/index[@name='DATE']/@value")
#print old value
$attr.Value
#update attribute value 
$attr.Value = "new value"
#print new value
$attr.Value
Note that Value in $attr.Value is property name of XmlAttribute. It doesn't affected by the fact that the attribute in your XML named value.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With