当前位置: 代码迷 >> C# >> 求,加载xml文件数据不成功?跪求!
  详细解决方案

求,加载xml文件数据不成功?跪求!

热度:84   发布时间:2016-05-05 05:14:50.0
求高手指点,加载xml文件数据不成功?跪求!!!
环境:.NET Frameword 4.5.2,文件路径都没有问题,我把引入的3个XML文件直接加的包含文件中就有值了,跪求高手指点


C#
void LoadXml (string xmlFile)
{
   int cnt = 0;
   XmlDocument xmlDoc = new XmlDocment ();
   xmlDoc.Load (xmlFile);
   XmlElement rootElement = xmlDoc.DocumentElement;
   XmlNodeList nodelist = rootElement.GetElementsByTagName ("Key");
   cnt = nodelist.Count;   //获得不到数据,什么原因????
}

XML
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE CONTROLPROP [
<!ENTITY ControlProp SYSTEM "ControlProp.xml">
<!ENTITY userProp SYSTEM "UserProp.xml">
<!ENTITY codeProp SYSTEM "CodeProp.xml">
]>
<CONTROLPROP>
&codeProp;
&ControlProp;
&userProp;
</CONTROLPROP> 
 
------解决思路----------------------
把你的xml,拷贝到文件中,用IE都打不开,你感觉你的这个xml不符合规范。。
------解决思路----------------------
 rootElement.GetElementsByTagName ("Key");没看到你的key标签
------解决思路----------------------
自己弄個標籤唄。你認真了解過Xml嗎?  :)
static void Main(string[] args)
{
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load(@"XML.Xml");
    XmlNodeList nodelist = xmlDoc.DocumentElement.GetElementsByTagName("XmlFilename");
    for (var index = 0; index < nodelist.Count; index++)
         Console.WriteLine(nodelist.Item(index).InnerText);
    Console.ReadKey();
}

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <XmlFilename>ControlProp.xml</XmlFilename>
  <XmlFilename>UserProp.xml</XmlFilename>
  <XmlFilename>CodeProp.xml</XmlFilename>
</resources>

------解决思路----------------------
引用:
被引入的xml文件中的标签不被读出来???

什麼是「被引入的xml文件中的标签」?
------解决思路----------------------
引用:
ControlProp.xml 、UserProp.xml、CodeProp.xml   里面的标签<key>

XML是標記語言,不會為你加載其他文件的。

如果需要它自動載入其他XML文件,你可以更改你的LoadXml (string xmlFile)函式。
大概就是將「引用標籤」中指向的XML文件讀到一個節點中,然後將節點添加到當前節點下。
------解决思路----------------------
GetElementsByTagName(String)只在當前節點下尋找。
對你的程式而言,當前節點是rootElement。
------解决思路----------------------
我试着重现了你的问题。参考
http://msdn.microsoft.com/en-us/library/system.xml.xmlreadersettings.xmlresolver(v=vs.110).aspx
http://msdn.microsoft.com/en-us/library/System.Xml.XmlReader.Create(v=vs.110).aspx

从4.5.2开始,XmlResolver的默认值从XmlUrlResolver改成了null,这样子就不会自动解析dtd里面的引用了(这估计算是一个安全漏洞)。需要自己指定下XmlResolver:

using (var xr = XmlReader.Create(xmlFile, new XmlReaderSettings { DtdProcessing = DtdProcessing.Parse, XmlResolver = new XmlUrlResolver() }))
    xmlDoc.Load(xr);

------解决思路----------------------
加载XML文件数据显示
//引入命名空间
using System.Xml;
//创建XmlDocment类实例加载XML文件数据

    protected void Page_Load(object sender, EventArgs e)
    { 
        
            XmlDocument doc = new XmlDocument();
            doc.Load(Server.MapPath("LeaveWord.xml"));
            bindXml();
     
    }//codego.net/tags/11/1/
//自定义方法将XML文件数据绑定到XmlDataSourc
 public void bindXml()
    {
        
        XmlDocument mydoc = this.XmlDataSourceLW.GetXmlDocument();
    }
  相关解决方案