我在阅读XML时遇到问题,如下所示:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<connections xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<connection id="1" odcFile="C:\Users\andr\Documents\My Data Sources\ELITE_MSSQLSERVER2012 PSO Reports.odc" keepAlive="1" name="ELITE_MSSQLSERVER2012 PSO Reports" type="5" refreshedVersion="5" background="1">
<dbPr connection="Provider=MSOLAP.5;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=PSO;Data Source=ELITE\MSSQLSERVER2012;MDX Compatibility=1;Safety Options=2;MDX Missing Member Mode=Error" command="Reports" commandType="1"/>
<olapPr sendLocale="1" rowDrillCount="1000"/>
</connection>
</connections>
(它实际上是* .xlsx包中的connection.xml文件)。我试图在XDocument的帮助下阅读它。我需要更改“odcFile”属性。问题是它将整个事物读作没有子元素的单个元素。为什么这样? XML看起来很正常。或者可能还有另一种解决方法可以做到这一点吗?
答案 0 :(得分:1)
如果可以访问实际的xml文件,请尝试使用System.Xml.Document。不确定你的意思是“它实际上是* .xlsx包中的connection.xml文件”:
using System.Xml
XmlDocument dom = new XmlDocument();
XmlNone root;
dom.Load(fullpath);
root = dom.DocumentElement;
答案 1 :(得分:1)
查询此文档时,您必须使用正确的XNamespace
实例。这是因为您的<connections>
标记将默认命名空间设置为 "http://schemas.openxmlformats.org/spreadsheetml/2006/main"
。
var xDoc = XDocument.Load("Input.txt");
var ns = XNamespace.Get("http://schemas.openxmlformats.org/spreadsheetml/2006/main");
var odcFile = xDoc.Root.Elements(ns + "connection")
.FirstOrDefault(x => (int)x.Attribute("id") == 1)
.Attribute("odcFile");
odcFile.Value = "newOdcValue";
xDoc.Save("Input.txt");