我想使用c#阅读以下xml。
<configuration>
<configSections>
<sectionGroup name="spring">
<section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core" />
<section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
</sectionGroup>
</configSections>
<spring>
<context>
<resource uri="config://spring/objects" />
</context>
<objects xmlns="http://www.springframework.net">
<object></object>
</objects>
</spring>
</configuration>
它不会从对象节点识别xmlns。
string xmlFile = @"App1.config";
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xmlFile);
XmlNodeList nodeList = xmlDoc.SelectNodes("configuration/spring/objects/object");
foreach (XmlElement xmlElement in nodeList)
{
string id = xmlElement.GetAttribute("id"); //Output - SimulatorControlTCP
XmlNodeList xmlPropertyNodeList = xmlElement.SelectNodes("property");
foreach (XmlElement xmlPropertyElement in xmlPropertyNodeList)
{
id = xmlPropertyElement.GetAttribute("value");
if ((id.Contains("tcp") || id.Contains("http")) && id.Contains("localhost"))
{
id = id.Replace("localhost","1.1.1.1");
xmlPropertyElement.Attributes[1].Value = id;
xmlDoc.Save(xmlFile);
}
}
}
它不会进入foreach循环。如果我删除xmlns,那么上面的代码工作正常。
答案 0 :(得分:0)
单向:
DataSet ds = new DataSet();
ds.ReadXml(Server.MapPath("YourFile.xml"));
GridView1.DataSource = ds;
GridView1.DataBind();
下一步:
<asp:Xml ID="Xml1" runat="server" DocumentSource="~/XML/XMLFile.xml">
</asp:Xml>
有关第二种方法的更多信息,请参见
http://www.codeproject.com/KB/aspnet/ASPNET_20_XMLControl.aspx
答案 1 :(得分:0)
老问题,但我认为很多人都有这个问题,就像我一样。
xmlns代表:XML NameSpace。
因此,当它出现在XML中时,您需要使用它进行搜索。
例如,如果要查找"<url xmlns='sm'>"
之类的元素,则需要指明您正在查找名称为"url"
且名称空间为"sm"
的元素。
为什么呢?对不起,我无法回答原因,但它的确如此。
好吧,为了解决我的问题,我已经改变了我的代码以使用XmlReader和LinqToXML,这让事情“变得更加容易”。
这是XML:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://www.url.com/</loc>
<changefreq>daily</changefreq>
<priority>1.00</priority>
</url>
<url>
<loc>http://www.url.com/</loc>
<changefreq>daily</changefreq>
<priority>0.9000</priority>
</url>
<url>
<loc>http://www.url.com/</loc>
<changefreq>daily</changefreq>
<priority>0.9000</priority>
</url>
<url>
<loc>http://www.url.com/</loc>
<changefreq>daily</changefreq>
<priority>0.9000</priority>
</url>
</urlset>
这是我用来读它的代码:
XDocument xmlDoc = XDocument.Load("sitemap.xml");
if (xmlDoc.Elements().Count() > 0)
{
using (MemoryStream memStream = new MemoryStream())
{
xmlDoc.Save(memStream);
memStream.Position = 0;
using (XmlReader reader = XmlReader.Create("sitemap.xml", new XmlReaderSettings() { IgnoreWhitespace = true }))
{
reader.MoveToContent();
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element && reader.LocalName.Equals("url", StringComparison.OrdinalIgnoreCase))
{
XElement el = XNode.ReadFrom(reader) as XElement;
if (el == null)
continue;
XName loc = XName.Get("loc", el.Name.Namespace.NamespaceName);
XName changefreq = XName.Get("changefreq", el.Name.Namespace.NamespaceName);
XName priority = XName.Get("priority", el.Name.Namespace.NamespaceName);
var elLoc = el.Element(loc);
var elChangeFreq = el.Element(changefreq);
var elPriority = el.Element(priority);
}
}
}
}
}
希望这会有所帮助。