读取xml文件时出现问题

时间:2013-09-09 23:10:43

标签: c# xml linq-to-xml

我在阅读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看起来很正常。或者可能还有另一种解决方法可以做到这一点吗?

2 个答案:

答案 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");