我将cricket播放器配置文件以<playerid>.xml
文件的形式保存在文件夹中。每个文件都包含这些标记:
<playerid>547</playerid>
<majorteam>England</majorteam>
<playername>Don</playername>
playerid与<playerid>.xml
中的相同(每个文件大小不同,1kb到5kb)。这些是大约500个文件。我需要的是从所有这些文件中提取playername,majorteam和playerid到列表。我稍后会将该列表转换为XML。如果您知道如何直接使用XML,我将非常感激。
如果有办法用C#或windows批处理文件或vbscript,我也可以使用Java。我只需要在一个地方获取我的数据(id和名称)。
答案 0 :(得分:2)
你为什么不这样做cat *.xml > all.xml
?
答案 1 :(得分:1)
使用xsd.exe从XML文件生成架构和类。
打开Visual Studio 2008命令提示符 从Visual Studio 2008命令提示符,运行
C:\ TEMP&GT; xsd.exe player.xml
这将根据您的XML文件生成XML Schema。
接下来,从Visual Studio 2008命令提示符运行
C:\ TEMP&GT; xsd.exe player.xsd / classes / language:CS
这会根据您的架构创建一个新类。
现在编写代码以使用您生成的类反序列化XML文件;您可以将此代码放在一个循环中,而不是文件。
FileStream fs = new FileStream("Player.XML", FileMode.Open);
// Create an XmlSerializer object to perform the deserialization
XmlSerializer xs = new XmlSerializer(typeof(Player));
Player p = xs.Deserialize(fs) as Player;
if ( s != null )
{
// process player here
}
答案 2 :(得分:0)
如果我必须执行此任务,我可能会在Perl中执行此操作。以前关于连接(cat)所有文件的建议并不正确,因为你最终会得到的不是有效的XML文件,而是一堆有效的XML文件背靠背。
Perl有一个名为CPAN的库,它包含完成任务的各种事情。如果您安装XPath Library,搜索所需的节点并将其输出到列表中应该非常容易。
如果XPath过于繁琐,您可能还需要查看正则表达式,俗称正则表达式。 Perl具有惊人的正则表达式支持。
如果我 使用Java,我可能会使用its support for regular expressions。如果我想真正了解文档的XML节点,我可能会使用Sun's Streaming API for XML (StAX)。
答案 3 :(得分:0)
选择您喜欢的脚本语言。我的Python。
用这种语言来说,这就是你要找的东西:
import xml.dom.minidom
import glob
from xml.parsers.expat import ExpatError
base_doc = xml.dom.minidom.parseString('<players/>')
doc_element = base_doc.documentElement
for filename in glob.glob("*.xml"):
f = open( filename )
x = f.read()
f.close()
try:
player = xml.dom.minidom.parseString(x)
except ExpatError:
print "ERROR READING FILE %s" % filename
continue
print "Read file %s" % filename
doc_element.childNodes.insert(-1, player.documentElement.cloneNode(True))
f = open( "all_my_players.xml", "w" )
f.write(doc_element.toxml())
f.close()