查询XML文件,然后输出到新的XML文件 [英] Query XML file and then output to new XML file
问题描述
大家好
我有个问题.我试图弄清楚如何查询XML文件,然后使用结果创建新的XML.这就是我所拥有的.
原始文件类似于以下内容:
Hello All
I have a problem. I''m trying to figure out how to query an XML file and then create a new XML with the results. This is what I have.
The original file looks similar to this:
<?xml version="1.0"?>
<TopNode>
<event uid="{AS1}">
<vertex Lat="13.33" Lon="46.33"/>
<vertex Lat="14.44" Lon="46.44"/>
<vertex Lat="15.55" Lon="46.55"/>
<vertex Lat="16.66" Lon="46.66"/>
<event uid="{AS2}">
<vertex Lat="23.33" Lon="56.33"/>
<vertex Lat="24.44" Lon="56.44"/>
<vertex Lat="25.55" Lon="56.55"/>
<vertex Lat="26.66" Lon="56.66"/>
<event uid="{AS3}">
<vertex Lat="33.33" Lon="66.33"/>
<vertex Lat="34.44" Lon="66.44"/>
<vertex Lat="35.55" Lon="66.55"/>
<vertex Lat="36.66" Lon="66.66"/>
<event uid="{AS4}">
<vertex Lat="43.33" Lon="76.33"/>
<vertex Lat="44.44" Lon="76.44"/>
<vertex Lat="45.55" Lon="76.55"/>
<vertex Lat="46.66" Lon="76.66"/>
</TopNode>
我正在尝试从C#CheckedListBox设置一个查询,该查询将具有AS1,AS2,AS3,AS4的列表.我想要检查AS2和AS4是否将与检查内容相关的所有内容推送到新的XML文档中,然后将其保存为新名称.
I''m trying to set up a query from C# CheckedListBox that would have the list of AS1, AS2, AS3, AS4. I want if I have AS2 and AS4 checked that everything associated with what is checked gets pushed to a new XML document that would look like this and then saved with a new name.
<?xml version="1.0"?>
<TopNode>
<event uid="{AS2}">
<vertex Lat="23.33" Lon="56.33"/>
<vertex Lat="24.44" Lon="56.44"/>
<vertex Lat="25.55" Lon="56.55"/>
<vertex Lat="26.66" Lon="56.66"/>
<event uid="{AS4}">
<vertex Lat="43.33" Lon="76.33"/>
<vertex Lat="44.44" Lon="76.44"/>
<vertex Lat="45.55" Lon="76.55"/>
<vertex Lat="46.66" Lon="76.66"/>
</TopNode>
我知道这是有可能的,但我的想法是空白.任何帮助将非常感激.
谢谢
I know this is all possible but my mind is blank on the idea. Any help would be much appreciated.
Thanks
推荐答案
我认为可以使用XElement
的IEnumerable
的Where
扩展方法来获得所需的结果,如下所示:
I think the required result can be obtained using theWhere
extension method ofIEnumerable
ofXElement
, as shown below:
string xmlData = @"<?xml version=""1.0""?>
<TopNode>
<event uid=""{AS1}"">
<vertex Lat=""13.33"" Lon=""46.33""/>
<vertex Lat=""14.44"" Lon=""46.44""/>
<vertex Lat=""15.55"" Lon=""46.55""/>
<vertex Lat=""16.66"" Lon=""46.66""/>
</event>
<event uid=""{AS2}"">
<vertex Lat=""23.33"" Lon=""56.33""/>
<vertex Lat=""24.44"" Lon=""56.44""/>
<vertex Lat=""25.55"" Lon=""56.55""/>
<vertex Lat=""26.66"" Lon=""56.66""/>
</event>
<event uid=""{AS3}"">
<vertex Lat=""33.33"" Lon=""66.33""/>
<vertex Lat=""34.44"" Lon=""66.44""/>
<vertex Lat=""35.55"" Lon=""66.55""/>
<vertex Lat=""36.66"" Lon=""66.66""/>
</event>
<event uid=""{AS4}"">
<vertex Lat=""43.33"" Lon=""76.33""/>
<vertex Lat=""44.44"" Lon=""76.44""/>
<vertex Lat=""45.55"" Lon=""76.55""/>
<vertex Lat=""46.66"" Lon=""76.66""/>
</event>
</TopNode>";
XDocument xdoc = XDocument.Parse(xmlData);
var requiredAttValues = new string[] {"{AS2}","{AS4}"};
var requiredElements = xdoc.Root.Elements().Where (r =>
requiredAttValues.Contains(r.Attribute("uid").Value));
var partDoc =new XDocument (
new XDeclaration ("1.0", "utf-8", "no"));
var root = new XElement("TopNode");
root.Add(requiredElements);
partDoc.Add(root);
partDoc.Save(outFileName);
//Contents of the output file
//<?xml version="1.0" encoding="utf-8" standalone="no"?>
//<TopNode>
// <event uid="{AS2}">
// <vertex Lat="23.33" Lon="56.33" />
// <vertex Lat="24.44" Lon="56.44" />
// <vertex Lat="25.55" Lon="56.55" />
// <vertex Lat="26.66" Lon="56.66" />
// </event>
// <event uid="{AS4}">
// <vertex Lat="43.33" Lon="76.33" />
// <vertex Lat="44.44" Lon="76.44" />
// <vertex Lat="45.55" Lon="76.55" />
// <vertex Lat="46.66" Lon="76.66" />
// </event>
//</TopNode>
这是我为您提供的非常简单的解决方案.首先将readxml数据放入数据表中,然后使用dataview过滤所需的数据.并将此dataview数据放到一个数据表中,而不是简单地创建xml文件.这是一个简单的例子
here is very simple solution that i am giving you. first readxml data and put into a datatable than using dataview filter the data as you want. and put this dataview data into a datatable than this datatale simply creat xml file. here is simple example
private void ReadxmlFromXml(string file_Path)
{
DataSet DS= new DataSet();
FileInfo FInfo = new FileInfo(file_Path);
if (FInfo.Exists)
{
System.Xml.XmlTextReader xmlReader = new System.Xml.XmlTextReader(FInfo.FullName);
xmlReader.WhitespaceHandling = WhitespaceHandling.None;
try
{
DS.ReadXml(xmlReader);
DataView dv = ds.Tables[0].DefaultView;
dv.RowFilter = "your condtition";
DataTable dtEx = dv.ToTable();
DataSet DS1= new DataSet();
DS1.Merge(dtEx);
string newxml=DS1.GetXml();
//--- now write code for save this xmlstring to file
}
catch (Exception ex)
{
}
finally
{
}
}
}
这篇关于查询XML文件,然后输出到新的XML文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!