环境:.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是標記語言,不會為你加載其他文件的。
如果需要它自動載入其他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();
}