读取 xml 文件时出现问题

本文关键字:问题 xml 文件 读取 | 更新日期: 2023-09-27 18:30:47

我在读取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>

(它实际上是一个连接.xml *.xlsx 包中的文件)。我正在尝试在XDocument的帮助下阅读它。我需要更改"odcFile"属性。问题是它将整个事物读取为没有子元素的单个元素。为什么会这样?XML 看起来很正常。或者也许还有另一种解决方法可以做到这一点?

读取 xml 文件时出现问题

如果可以访问实际的 xml 文件,请尝试改用 System.Xml.Document。不确定"它实际上是 *.xlsx 包中的连接.xml文件"是什么意思:

using System.Xml
XmlDocument dom = new XmlDocument();
XmlNone root;
dom.Load(fullpath);
root = dom.DocumentElement;

查询此文档时,您必须使用正确的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");