web-dev-qa-db-ja.com

XML属性値に&、<、>などを含める方法

Javaプログラムの構造を格納するために使用されるXMLファイルを作成します。Javaプログラムを正常に解析して、 Javaソースコードは&のような多数のエンティティ参照と予約文字を使用する可能性があるため、タグ内にソースコードを含めようとすると問題が発生します。 <>&。有効なXMLを作成できません。

私のXMLは次のようになります。

<?xml version="1.0"?>
<prg name="prg_name">
  <class name= "class_name>
    <parent>parent class</parent>
      <interface>Interface name</interface>
.
.
.
      <method name= "method_name">
        <statement>the ordinary Java statement</statement>
        <if condition="Conditional Expression">
          <statement> true statements </statement>
        </if>
        <else>
          <statement> false statements </statement>
        </else>
        <statement> usual control statements </statement>
 .
 .
 .
      </method>
    </class>
 .
 .
 .
 </prg>

このようになりますが、問題はifまたは他のステートメントの条件式に&またはその他の予約済みシンボルがあり、XMLが検証されないことです。このデータ(ソースコード)はすべてユーザーによって提供されるため、私はそれをほとんど制御できません。キャラクターのエスケープは時間の面で非常にコストがかかります。

CDATAを使用して要素テキストをエスケープできますが、条件式を含む属性値には使用できません。 Antlr Java文法を使用してJavaプログラムを解析し、タグの属性とコンテンツを取得しています。他の回避策はありますか?

38
Sudh

脱出する必要があります

" to  &quot;
' to  &apos;
< to  &lt;
> to  &gt;
& to  &amp;

xmlの場合。

69
Bala R

XML属性では、エスケープする必要があります

" with &quot;
< with &lt;
& with &amp;

属性値を二重引用符(")で囲む場合、たとえば.

<MyTag attr="If a&lt;b &amp; b&lt;c then a&lt;c, it's obvious"/>

タグの意味MyTag属性付きattrテキスト付きIf a<b & b<c then a<c, it's obvious-注:&apos;文字をエスケープするために'を使用する必要はありません.

属性値を単一引用符(')で囲む場合、これらの文字をエスケープする必要があります。

' with &apos;
< with &lt;
& with &amp;

"をそのまま書くことができます。属性テキストで>を使用した&gt;のエスケープ必須ではありません、例: <a b=">"/>は整形式のXMLです。

21
izogfif