я разрешил его путем установки окон 7 сначала только с одним разделом т.е. C:. затем установленный Fedora 20 и перезагруженный в окна 7. Используя управление дисками я создал другие два раздела. Благодаря @Robin Green для его поддержки.
OK. Здесь есть довольно фундаментальная проблема. XML является сложным языком с подробным спецификацией. Без библиотек это сложно - XML довольно принципиально вещь, которая нуждается в правильном разборе.
Так что, например, использование XML :: Twig
с Perl, вы получите:
use strict;
use warnings;
use XML::Twig;
my $twig = XML::Twig->new()->parsefile ( 'your_xml_file.xml' );
print "id_localisation;id_client;key\n";
foreach my $record ( $twig->root->children('record') ) {
foreach my $data ( $record->children('data') ) {
print join( ";",
$record->first_child_text('id_localisation'),
$data->first_child_text('id_client'),
$data->first_child_text('key'),
),
"\n";
}
}
Вы можете найти, что XML :: Twig
уже доступен - это довольно распространенно «По умолчанию установка». Так что проведите это сначала.
Существует грязный вид хаки для этого, но я действительно не рекомендовал бы сделать это. Я имею в виду действительно действительно, потому что он делает хрупкий и ужасный код.
Я не могу подтвердить это в любых более сильных условиях. Прежде чем сделать это, посмотрите на: https://stackoverflow.com/a/1732454/2566198
и: https://stackoverflow.com/a/28913945/2566198
Обратите внимание, что вы можете установить модули Perl «на пользователя» в определенные обстоятельства, которые могут быть особенно актуальными здесь.
И признайте, что ваш код сознательно нарушает спецификацию XML - обрабатывая его в качестве текстового файла. Это все виды плохого juju, не в последнюю очередь, потому что есть некоторые совершенно действительные вещи, которые вы можете сделать с XML, что сломает это.
Однако, если вы абсолютно должны:
use strict;
use warnings;
open ( my $input_xml, "<", 'your_xml_file.xml' ) or die $!;
my $loca = "";
print "id_localisation;id_client;key\n";
for (<$input>) {
my ($value) = (m/>(\w+)</);
if (m/id_localisation/) { $loca = $value; }
if (m/id_client/) { print "$loca;$value;"; }
if (m/key/) { print "$value\n"; }
}
close($input);
, который будет печать:
id_localisation;id_client;key
8PJ;50C;C
8PJ;25C;D1
ESP31;70D;D2
ESP31;10D;D3
, если вы планируете использовать это для любой функции производства, то сначала спешите, кто не позволит вам установить вещи и получить их для установки библиотеки, которые вам нужны. Это может звучать как тяжелую работу, но поверь мне - нет ничего хуже, чем пытаться устранить неисправность то, что загадочно сломало один день, потому что формат передачи данных изменился (в специфическом сценарии не реализует стандарт.
Я бы предложил бы использовать XSL-файл
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output type="text" indent="yes" omit-xml-declaration="yes" />
<xsl:template match="//record">
<xsl:for-each select="data" >
<xsl:value-of select="../id_localisation" />;<xsl:value-of select="id_client" />;<xsl:value-of select="key "/><xsl:text>;
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
для использования с
xsltproc sample.xsl sample.xml
Используйте lxprintf из набора инструментов ltXML2 (Эдинбургский университет), например:
$ lxprintf -e data "%s;%s;%s\n" ../id_localisation id_client key test.xml
8PJ;50C;C
8PJ;25C;D1
ESP31;70D;D2
ESP31;10D;D3
Использование XSLT2 это нормально, но слишком много для такого извлечения.
XML FAQ: http://xml.silmaril.ie/