我有一个包含大约 10,000 行的 XML 文件,我想将一些数据提取到 CSV 文件中。
我遇到的问题是提取 id 属性和联盟名称标签的内部文本。如果有人能阐明为什么不显示 ID 以及如何获取内部文本,那将非常有帮助。
重复样本数据
<players>
<towns>
<town>
<player>
<playername id="1">MyName</playername>
<playerrace>Human</playerrace>
<playeralliance>
<alliancename id="18">DaVS</alliancename>
<alliancetag>DaVS</alliancetag>
<alliancetax>0.01</alliancetax>
</playeralliance>
</player>
</town>
<town>
<player>
<playername id="2">Tonka</playername>
<playerrace>Human</playerrace>
<playeralliance>
<alliancename id="18">DaVS</alliancename>
<alliancetag>DaVS</alliancetag>
<alliancetax>0.01</alliancetax>
</playeralliance>
</player>
</town>
<town>
<player>
<playername id="2">Tonka</playername>
<playerrace>Human</playerrace>
<playeralliance>
<alliancename id="18">DaVS</alliancename>
<alliancetag>DaVS</alliancetag>
<alliancetax>0.01</alliancetax>
</playeralliance>
</player>
</town>
<town>
<player>
<playername id="2">Tonka</playername>
<playerrace>Human</playerrace>
<playeralliance>
<alliancename id="18">DaVS</alliancename>
<alliancetag>DaVS</alliancetag>
<alliancetax>0.01</alliancetax>
</playeralliance>
</player>
</town>
<town>
<player>
<playername id="2">Tonka</playername>
<playerrace>Human</playerrace>
<playeralliance>
<alliancename id="18">DaVS</alliancename>
<alliancetag>DaVS</alliancetag>
<alliancetax>0.01</alliancetax>
</playeralliance>
</player>
</town>
<town>
<player>
<playername id="2">Tonka</playername>
<playerrace>Human</playerrace>
<playeralliance>
<alliancename id="18">DaVS</alliancename>
<alliancetag>DaVS</alliancetag>
<alliancetax>0.01</alliancetax>
</playeralliance>
</player>
</town>
<town>
<player>
<playername id="2">Tonka</playername>
<playerrace>Human</playerrace>
<playeralliance>
<alliancename id="18">DaVS</alliancename>
<alliancetag>DaVS</alliancetag>
<alliancetax>0.01</alliancetax>
</playeralliance>
</player>
</town>
<town>
<player>
<playername id="2">Tonka</playername>
<playerrace>Human</playerrace>
<playeralliance>
<alliancename id="18">DaVS</alliancename>
<alliancetag>DaVS</alliancetag>
<alliancetax>0.01</alliancetax>
</playeralliance>
</player>
</town>
<town>
<player>
<playername id="2">Tonka</playername>
<playerrace>Human</playerrace>
<playeralliance>
<alliancename id="18">DaVS</alliancename>
<alliancetag>DaVS</alliancetag>
<alliancetax>0.01</alliancetax>
</playeralliance>
</player>
</town>
<town>
<player>
<playername id="2">Tonka</playername>
<playerrace>Human</playerrace>
<playeralliance>
<alliancename id="18">DaVS</alliancename>
<alliancetag>DaVS</alliancetag>
<alliancetax>0.01</alliancetax>
</playeralliance>
</player>
</town>
<town>
<player>
<playername id="3">Sinner</playername>
<playerrace>Human</playerrace>
<playeralliance>
<alliancename id="1">Harmless?</alliancename>
<alliancetag>TH</alliancetag>
<alliancetax>0.00</alliancetax>
</playeralliance>
</player>
</town>
<town>
<player>
<playername id="3">Sinner</playername>
<playerrace>Human</playerrace>
<playeralliance>
<alliancename id="1">Harmless?</alliancename>
<alliancetag>TH</alliancetag>
<alliancetax>0.00</alliancetax>
</playeralliance>
</player>
</town>
<town>
<player>
<playername id="3">Sinner</playername>
<playerrace>Human</playerrace>
<playeralliance>
<alliancename id="1">Harmless?</alliancename>
<alliancetag>TH</alliancetag>
<alliancetax>0.00</alliancetax>
</playeralliance>
</player>
</town>
<town>
<player>
<playername id="10">Kumomoto</playername>
<playerrace>Elf</playerrace>
<playeralliance>
<alliancename id="1">Harmless?</alliancename>
<alliancetag>TH</alliancetag>
<alliancetax>0.00</alliancetax>
</playeralliance>
</player>
</town>
</towns>
</players>
当前代码
$xml.selectNodes('//playeralliance') |
select alliancename.id, allianceticker, alliancetaxrate
输出
PS C:\Users\jon> $xml.selectNodes('//playeralliance') | select alliancename.id, alliancename, alliancetag, alliancetax
alliancename.id alliancename alliancetag alliancetax
--------------- ------------ ----------- -----------
alliancename DaVS 0.01
alliancename DaVS 0.01
alliancename DaVS 0.01
alliancename DaVS 0.01
alliancename DaVS 0.01
alliancename DaVS 0.01
alliancename DaVS 0.01
alliancename DaVS 0.01
alliancename DaVS 0.01
alliancename DaVS 0.01
alliancename TH 0.00
alliancename TH 0.00
alliancename TH 0.00
alliancename TH 0.00
过去的代码示例
[xml]$xml = Get-Content 'C:\Users\jhold\Desktop\Illyriad Data\sample.xml';
$xml.towns.town.player;
foreach($item in $xml.playeralliance)
{
$allianceName = $item
#$allianceID = $item.id
#$allianceTicker = $item.allianceticker
#$allianceTax = $item.alliancetax
Write-host "Name: " $allianceName
#Write-host "ID: " $allianceID
#Write-host "Ticker: " $allianceTicker
#Write-host "Tax: " $allianceTax
}
最佳答案
$xml.SelectNodes('//playeralliance') |
Select-Object @{n='allianceid';e={$_.alliancename.id}},
@{n='alliancename';e={$_.alliancename.'#text'}},
@{n='allianceticker';e={$_.alliancetag}},
@{n='alliancetaxrate';e={$_.alliancetax}}
关于xml - 从 XML 中提取属性和内部文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34302981/
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2
我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog
对于Rails模型,是否可以/建议让一个类的成员不持久保存到数据库中?我想将用户最后选择的类型存储在session变量中。由于我无法从我的模型中设置session变量,我想将值存储在一个“虚拟”类成员中,该成员只是将值传递回Controller。你能有这样的类(class)成员吗? 最佳答案 将非持久属性添加到Rails模型就像任何其他Ruby类一样:classUser扩展解释:在Ruby中,所有实例变量都是私有(private)的,不需要在赋值前定义。attr_accessor创建一个setter和getter方法:classUs
Rails中有没有一种方法可以提取与路由关联的HTTP动词?例如,给定这样的路线:将“users”匹配到:“users#show”,通过:[:get,:post]我能实现这样的目标吗?users_path.respond_to?(:get)(显然#respond_to不是正确的方法)我最接近的是通过执行以下操作,但它似乎并不令人满意。Rails.application.routes.routes.named_routes["users"].constraints[:request_method]#=>/^GET$/对于上下文,我有一个设置cookie然后执行redirect_to:ba
所以这可能有点令人困惑,但请耐心等待。简而言之,我想遍历具有特定键值的所有属性,然后如果值不为空,则将它们插入到模板中。这是我的代码:属性:#===DefaultfileConfigurations#default['elasticsearch']['default']['ES_USER']=''default['elasticsearch']['default']['ES_GROUP']=''default['elasticsearch']['default']['ES_HEAP_SIZE']=''default['elasticsearch']['default']['MAX_OP
假设我有以下类(class):classPersondefinitialize(name,age)@name=name@age=ageenddefget_agereturn@ageendend我有一组Person对象。是否有一种简洁的、类似于Ruby的方法来获取最小(或最大)年龄的人?如何根据它对它们进行排序? 最佳答案 这样做会:people_array.min_by(&:get_age)people_array.max_by(&:get_age)people_array.sort_by(&:get_age)