Строка.Заменить символы

Я хочу заменить некоторые символы в запросе 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>
Другие вопросы по тегам