XML文档解析c#

本文关键字:文档 XML | 更新日期: 2023-09-27 18:04:42

我有一个创建XMLDocument的REST web服务,我对如何使用XMLNode访问FormattedPrice中的内部文本有点困惑。我可以写毕业启事,但这将给我所有的内部文本。

<Offers>
    <Offer>
       <OfferListing>
          <Price>
            <Amount>1067</Amount>
            <CurrencyCode>USD</CurrencyCode>
            <FormattedPrice>$10.67</FormattedPrice>
          </Price>
       </OfferListing>
    </Offer>
</Offers>

XML文档解析c#

如果您正在使用Xml DOM,那么快速浏览XPath将非常有帮助。

这应该能满足你的迫切需要:

XmlNode n = doc.DocumentElement.SelectSingleNode("Offer/OfferListing/Price/FormattedPrice");

这将为您提供第一个报价的格式化价格(并假设您的报价节点是根节点)。XPath中还存在其他不那么脆弱的机制,这正是教程可以帮助您的地方。

您最好使用XPath。

XmlDocument doc = ...;
XmlNode fPrice;
XmlElement root = doc.DocumentElement;
fPrice= root.SelectSingleNode("/Price/FormattedPrice");
return fPrice.InnerText;
下面是一个很好的例子:http://www.codeproject.com/KB/cpp/myXPath.aspx

使用XElement解析:

string tmp = @"
<Offers>
<Offer>
 <Price>
   <Amount>1067</Amount>
   <CurrencyCode>USD</CurrencyCode>
   <FormattedPrice>$10.67</FormattedPrice>
 </Price>
 </Offer>
</Offers>";
XElement xml = XElement.Parse(tmp);
string formatedPrice = (string)xml.XPathSelectElement("/Offer/Price/FormattedPrice");

这应该会抓取$ amount:

var price = doc.SelectSingleNode(@"//Offer/Price/FormattedPrice");
string priceText = price.InnerText;

将您想要的内容加载到XmlNodeList中,然后显式地拉出一个或遍历它们…

XmlNodeList pricesList = xmlDoc.GetElementsByTagName("FormattedPrice");
string firstPrice = pricesList[0].InnerText;

首先,您的XML无效....你错过了开始的OfferListing标签。

这是另一个获取节点文本的选项。

var xmlString = "<Offers><Offer><OfferListing><Price><Amount>1067</Amount<CurrencyCode>USD</CurrencyCode><FormattedPrice>$10.67</FormattedPrice></Price></OfferListing></Offer></Offers>";
var xDoc = new XmlDocument();
xDoc.LoadXml(xmlString);
var formattedPrice = xDoc.GetElementsByTagName("FormattedPrice")[0].InnerText;