Строка.Заменить символы
Я хочу заменить некоторые символы в запросе fetchxml
Fetchxml.Replace("\"", "'").Replace("\n", "\"+").Replace("<", "\" <");
Я хочу заменить \ n (вернуться к строке) на "+ и заменить<на" <Но замена ("\ n", "\" + "), которая не работает, все равно \ n и замена ("<", "\" <") он заменяет <на \" Пример XML: Желаемый результат:<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false"> <entity name="account"> <attribute name="name" /> <filter type="and"> <condition attribute="statecode" operator="eq" value="0" /> </filter> <link-entity name="contact" from="contactid" to="primarycontactid" visible="false" link-type="outer" alias="accountprimarycontactidcontactcontactid"> <attribute name="emailaddress1" /> </link-entity> </entity> </fetch>
<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>"+ "<entity name='account'>"+ "<filter type='and'>"+ "<condition attribute='statecode' operator='eq' value='0' />"+ "</filter>"+ "</entity>"+ "</fetch>
1 ответ
Похоже, вы пытаетесь просто вставить "+" в текстовые элементы этого XML. Это немного странно, но я укушу.
Я бы предположил, что это легко в Perl, используя XML::Twig
, Проблема с XML в том, что он не легко разбирается с регулярным выражением, но он легко разбирается с анализатором XML.
Итак, данный входной XML:
<fetch distinct="false" mapping="logical" output-format="xml-platform" version="1.0">
<entity name="account">
<attribute name="name"/>
<filter type="and">
<condition attribute="statecode" operator="eq" value="0"/>
</filter>
<link-entity alias="accountprimarycontactidcontactcontactid" from="contactid" link-type="outer" name="contact" to="primarycontactid" visible="false">
<attribute name="emailaddress1"/>
</link-entity>
</entity>
</fetch>
Его можно превратить в близкое приближение к желаемому выходному XML:
#!/usr/bin/perl
use strict;
use warnings;
my $xml = XML::Twig->new(
'pretty_print' => 'indented',
'twig_handlers' => {
'attribute' => sub { $_->delete },
'link-entity' => sub { $_->delete },
},
);
$xml->parse( \*DATA );
$xml ->print;
Это дает вам:
<fetch distinct="false" mapping="logical" output-format="xml-platform" version="1.0">
<entity name="account">
<filter type="and">
<condition attribute="statecode" operator="eq" value="0"/>
</filter>
</entity>
</fetch>
(Если вы не хотите, чтобы строка отделялась и имела отступ, отключите pretty_print
флаг) Теперь я не совсем уверен, что вы пытаетесь достичь с +
символы там. Возможно, вы пытаетесь процитировать свой результат XML? Честно говоря, это не имеет большого смысла с точки зрения XML.
Хотя, если бы вам действительно пришлось, я думаю, вы могли бы:
my $output_xml = $xml ->sprint;
$output_xml =~ s/^\s+//gm;
$output_xml =~ s/\n</"+ "</g;
print $output_xml;
Что бы дать вам:
<fetch distinct="false" mapping="logical" output-format="xml-platform" version="1.0">"+ "<entity name="account">"+ "<filter type="and">"+ "<condition attribute="statecode" operator="eq" value="0"/>"+ "</filter>"+ "</entity>"+ "</fetch>