以编程方式将xml命名空间添加到代码中

时间:2014-01-15 09:52:38

标签: c# xml string xml-namespaces

我正在研究C#中的一些代码,我希望输出作为某些xml文件中某些xpath的文本。现在,随着xml文件的不断变化以及命名空间的不断变化,我不想在代码中对命名空间进行硬编码。

XmlDocument xml = new XmlDocument();
xml.Load(file);
XmlNamespaceManager nsMgr = new XmlNamespaceManager(xml.NameTable);

现在,当命名空间不断变化时,我正在考虑读取xml并使用一些字符串操作来获取namspace和uri字符串:

string s = System.IO.File.ReadAllText(file);
string[] s1 = new string[1];
s1[0]="xmlns:";
string[] s3 =  s.Split(s1, System.StringSplitOptions.None);
foreach (string k in s3)
{
    nsMgr.AddNamespace( k.Substring( 0 , k.IndexOf('=') - 1) , need help for this )
}

拆分操作后的k的一些示例值为:

  

“xs = \”http://www.w3.org/2001/XMLSchema \“”

     

“location = \”urn:x-ABC:content:location:mastering:1 \“”

     

“entity = \”urn:x-ABC:content:identified-entities:mastering:1 \“”

我需要有关nsMgr.AddNamespace()的第二个参数的帮助。此外,如果有一种更简洁的添加名称空间而无需硬编码的方法。

编辑: - 澄清我在这里做的事情。我正在尝试编写一个winform,通过该winform可以将输出作为文本存在于某些xml中的某个xpath中。所以winform需要2个输入。一个是xml文件位置,另一个是xpath。输出应该是该xpath位置的文本。

例如     <a> <b>abc </b> </a>

如果用户搜索// b或a / b,则输出应为abc。

当存在默认名称空间时,代码工作正常,但是当xml定义了名称空间时,我需要将它们包含在代码中。因为我想使代码通用,所以我不能硬编码命名空间。

0 个答案:

没有答案