Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何增加xml文件中的节点_C#_Xml_Powershell - Fatal编程技术网

C# 如何增加xml文件中的节点

C# 如何增加xml文件中的节点,c#,xml,powershell,C#,Xml,Powershell,我有一个类似这样的xml文件 <?xml version="1.0" encoding="utf-8"?> <Settings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <PreviousFolderVersion>2.0.0.0</PreviousFolderVersion> <

我有一个类似这样的xml文件

<?xml version="1.0" encoding="utf-8"?>
<Settings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <PreviousFolderVersion>2.0.0.0</PreviousFolderVersion>
  <FileMajor>2</FileMajor>
  <FileMinor>0</FileMinor>
  <FileBuild>0</FileBuild>
  <FileRevision>0</FileRevision>
  <ProductMajor>2</ProductMajor>
  <ProductMinor>0</ProductMinor>
  <ProductBuild>0</ProductBuild>
  <ProductRevision>0</ProductRevision>
  <FolderMajor>2</FolderMajor>
  <FolderMinor>0</FolderMinor>
  <FolderBuild>0</FolderBuild>
  <FolderRevision>0</FolderRevision>
  <FileVersion>2.0.0.0</FileVersion>
  <ProductVersion>2.0.0.0</ProductVersion>
  <FolderVersion>2.0.0.0</FolderVersion>
</Settings>
但它似乎不起作用。我得到一个错误,如下所示:

无法将“ReplaceChild”的值为“0”的参数“1”转换为 类型“System.Xml.XmlNode”:“无法转换类型的“0”值。” “System.String”以键入“System.Xml.XmlNode” C:\workspace\Ahltaprint\Build\buildawp.ps1:157字符:1 +$xml.Settings.ReplaceChild($newChild,$fileBuild) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +CategoryInfo:NotSpecified:(:)[],MethodException +FullyQualifiedErrorId:MethodArgumentConversionInvalidCastArgument


显然,在Powershell中使用XML文件有多种方法,但我通常认为使用XPath表达式最简单:

$xml.SelectSingleNode("/Settings/FileBuild").InnerText = "2"
$xml.Settings.FileBuild         # Produces "2"
顺便说一下,代码片段不起作用的原因是,尽管
$xml.Settings
属于
xmlement
类型,
$xml.Settings.FileBuild
不是而是一个字符串,可能是因为它是一个“简单”元素,即没有子元素或属性

如果您获得这样的文件构建,它的类型为
xmlement
,其余替换代码将正常工作:

$fileBuild = $xml.Settings.GetElementsByTagName("FileBuild")[0]
您可以通过对变量或表达式调用
GetType()
来验证这一点:

$fileBuild.GetType()   # Produces XmlElement

Astrotrain,感谢您的建议和示例!
$fileBuild.GetType()   # Produces XmlElement