如何在字符串中获取xml节点值。
我收到此错误
根级别的数据无效。第1行,第1位。
错误显示在此行
xmldoc.LoadXml(xmlFile);
我的xml
<?xml version="1.0" encoding="utf-8" ?>
<UOM>
<!-- The selected currency used will be stored here for Code reference" -->
<ActiveCurrencyType>
<ActiveCurrency>U.S.Dollar</ActiveCurrency>
<ActiveCode>USD</ActiveCode>
<ActiveSymbol>$</ActiveSymbol>
</ActiveCurrencyType>
<!-- The selected Dimension used will be stored here for Code reference -->
<ActiveDimension>
<ActiveDimensionUOM>Inches</ActiveDimensionUOM>
<ActiveDimensionSymbol>.in</ActiveDimensionSymbol>
</ActiveDimension>
<!-- The selected weight used will be stored here for Code reference -->
<ActiveWeight>
<ActiveWeightUOM>Pounds</ActiveWeightUOM>
<ActiveWeightSymbol>lb</ActiveWeightSymbol>
</ActiveWeight>
</UOM>
C#代码
string xmlFile = Server.MapPath("~/HCConfig/HCUOM.xml");
XmlDocument xmldoc = new XmlDocument();
xmldoc.LoadXml(xmlFile);
XmlNodeList nodeList = xmldoc.GetElementsByTagName("ActiveDimensionSymbol");
string ActiveDimensionSymbol = string.Empty;
foreach (XmlNode node in nodeList)
{
ActiveDimensionSymbol = node.InnerText;
}
我怎样才能做到这一点?
答案 0 :(得分:2)
您使用了错误的重载,LoadXml
并没有按照您的想法执行操作。
使用xmldoc.Load(xmFile);
,因为该方法将文件路径作为输入。 LoadXml
期望一个包含xml的字符串。
该例外是该错误的指标。处理的不是XML,文件路径不是。
在此更改后,如果我在本地运行,则字符串ActiveDimensionSymbol
包含.in
。
如果你想使用LoadXml
,首先应该用字符串读取整个文件,例如:
xmldoc.LoadXml(File.ReadAllText(xmlFile));
但如果有一个接受文件的方法,则实际上只是调用File.ReadAllText
的开销。
答案 1 :(得分:0)
您可以使用Descendants()
方法以System.Xml.Linq
命名空间中的特定名称获取所有XElements。
XDocument doc = XDocument.Load("XMLFile1.xml");
string[] allActiveWeightUOMs = doc.Descendants("ActiveWeightUOM").Select(o => o.Value).ToArray();
// allActiveWeightUOMs : "Pounds" ...
答案 2 :(得分:0)
正如此处link所示,用于加载XML的方法除了xml之外,不是字符串而是xml文件。您可以使用XmlDocument.LoadXml
代替if (Integer.parseInt(quantity.getText().toString())!=1){
quantity.setText(""+Integer.parseInt(quantity.getText().toString())-1);
}
答案 3 :(得分:0)
尝试使用此代码可以正常使用此xml
string xmlFile = Server.MapPath("~/HCConfig/HCUOM.xml");
XDocument doc = XDocument.Load(xmlFile );
var nodeList = doc.Descendants("ActiveDimensionSymbol");
string ActiveDimensionSymbol = string.Empty;
foreach (var node in nodeList)
{
ActiveDimensionSymbol = node.Value;
}