我需要从大型xml文件中获取一些网址。
Xml文件具有以下结构。
<Main>
<Product>
<Images>
<URL>image1.jpg</URL>
<URL>image2.jpg</URL>
<URL>image3.jpg</URL>
<URL>image4.jpg</URL>
</Images>
</Product>
......
我需要将所有链接提取到文本文件中。 有任何关于如何做到这一点的想法/?
答案 0 :(得分:2)
如果您安装了Perl(或者您可以安装它),则可以使用xml_grep
附带的xml_grep --text_only URL product_file.xml > url.txt
(可在XML::Twig中找到)或Activestate Perl或当然是关于centOS)。
{{1}}
它可以处理非常大的文件,因为它在流模式下工作。
答案 1 :(得分:0)
你只需要网址吗?
给定的结构看起来像是与图像/产品数据相关联的网址?如果您不关心其他数据并且只需要所有网址,那么应该采用正则表达式
答案 2 :(得分:0)
以下是应加载您粘贴的XML的示例。您需要添加System.Xml.Linq
,因为它使用LINQ to XML。首先,我们使用XDocument.Load(...)
加载XML文档:
// Load the raw XML into an XDocument.
var doc = XDocument.Load(new StringReader(@"<Main>
<Product>
<Images>
<URL>image1.jpg</URL>
<URL>image2.jpg</URL>
<URL>image3.jpg</URL>
<URL>image4.jpg</URL>
</Images>
</Product>
</Main>"));
我使用StringReader
和示例字符串,但您应该将其更改为加载XML文件的内容。例如,XDocument.Load("C:\folder\file.xml")
将加载文件(请参阅XDocument.Load(string))。
// Create a list to store the URLs in.
var urls = new List<string>();
// Get the <Main> element.
var mainNode = doc.Element("Main");
// Loop through the <Product> elements...
foreach (var productNode in mainNode.Elements("Product"))
{
// Loop through the <Images> elements (if there's more than one).
foreach (var imagesNode in productNode.Elements("Images"))
{
// Loop through the <URL> elements...
foreach (var urlNode in imagesNode.Elements("URL"))
{
// The "Value" property is the text within the element.
urls.Add(urlNode.Value);
}
}
}
// Write the URLs out to the Debug output.
foreach (var url in urls)
Debug.WriteLine(url);
此时,您将拥有一个网址列表。如果你想将它们写入文件,这是一个例子:
// Create an output file.
using(var outputFile = File.Create("output.txt"))
{
var writer = new StreamWriter(outputFile);
foreach (var url in urls)
writer.WriteLine(url);
}
您不一定要像我一样创建列表并将列表写入文件 - 您可以在阅读时将URL写入文本文件。
让我知道我还能做些什么来帮助你。
答案 3 :(得分:0)
如何使用XPath检索所需的节点?然后,您可以将该列表的内容写入文本文件。这里有一些C#中的代码可以帮到你:
public static void Main(string[] Arguments)
{
XmlDocument oXmlDocument = new XmlDocument();
oXmlDocument.Load(@"XmlFile.xml");
using (StreamWriter oStreamWriter = new StreamWriter(File.OpenWrite(@"Output.txt")))
{
XmlNodeList oXmlNodeList = oXmlDocument.SelectNodes("//URL");
oXmlNodeList.OfType<XmlNode>().ToList<XmlNode>().ForEach(m => oStreamWriter.WriteLine(m.InnerText));
}
}
如果文档很大,最好考虑使用SAX方法而不是使用DOM。
我希望有所帮助。