web-dev-qa-db-ja.com

XMLファイル内の自己終了タグ

<tag id="foo" />

PHP SimpleXML。

しかし、私がWebで見つけたすべてのXMLの例は、古い方法でそれらを閉じます。

<tag id="foo"></tag>

古い方法を使用する理由はありますか?

22
Natasha

XMLおよびXHTMLのW3C仕様を参照してください。

Element Type宣言に依存します

コンテンツのない要素は空と呼ばれます。空要素の表現は、開始タグの直後に終了タグが続くか、空要素タグのいずれかです。

だけでなく

空要素タグは、キーワードEMPTYを使用して宣言されているかどうかにかかわらず、コンテンツを持たない要素に使用できます。相互運用性のために、EMPTYとして宣言された要素に対しては、空要素タグを使用する必要があり(SHOULD)、使用する必要があります(SHOULD)。

つまり、DTDに次のようなものが含まれている場合

<!ELEMENT img EMPTY>

あなたshoulduse

<img/>

使用する正当な理由がない限り

<img></img>

RFC2119で定義されている必要があります

この言葉、または「推奨」という形容詞は、特定の状況で特定の項目を無視する正当な理由が存在する可能性があることを意味しますが、別のコースを選択する前に完全な意味を理解して慎重に検討する必要があります。

DTDまたはスキーマを持たないXMLを使用している場合は、XMLのシリアル化方法に 事前定義されたlibxml定数 を使用することもできます。

LIBXML_NOEMPTYTAG(整数):空のタグを展開します(例:<br/>から<br></br>

ただし、このオプションは現在、関数DOMDocument::saveおよびDOMDocument::saveXMLなので、SimpleXmlでは使用できません。

25
Gordon

PHPの xmlパーサー を使用する場合は、開始タグ、終了タグ、または完全なタグに対して アクションの指定 を使用できます。あなたの希望に基づいて、具体的には終了タグに対してアクションを実行したい場合があります。

2
y_a_v_a

はい、それは最初に見えるほど単純ではありません。

XSDの違い:

まず、データ型に依存します。要素のタイプを定義するXSDスキーマ定義を使用する場合、<element></element>は実際には文字列タイプにのみ使用できます。なぜなら、それはそれであり、実際には空の文字列値""であるためです。

そのため、整数に<element></element>を使用することは違法ですが、対照的に<element/>はすべての単純型に適用できます。

JAXBの違い:

JAXB(Java XMLバインディング)にも同様の癖があります。 <element/>をターゲットデータタイプに応じて異なる値としてマッピングします

  • 文字列の場合、「」になります
  • 整数の場合、0になります。
  • 他のタイプの場合は、スキップします。

<element/>nullの値に解決されると思われるかもしれません。ただし、実際には<element xsi:nil="true"/>を使用する必要があります。私は実際に見たことがありません。

HTML:

HTMLには常に、<element>の3番目のオプションがあり、タグを閉じません。私はあなたのことは知りませんが、1日に数回、HTMLは単なるXMLではないことを思い出す必要があります。そして、実際には<br><br/>は同じものではないということです。 HTMLでは<br/>を使用しないでください。XHTMLでは<br>を使用しないでください。

角度2+:

しかし、Angular2 +のようなフレームワークを使用する場合、最後のステートメントを続けて、私が本当にやりたかったことを心に留めておく必要があります。

あまり詳細に飛び込まずに、AngularはカスタムHTMLタグをコンポーネントにリンクされたHTMLテンプレートに置き換えます。ただし、<element></element>形式のみをサポートします<element/>形式の使用は許可されていません。

私は個人的に<element/>構文を避けようとしていますが、これは物事がうまくいかない可能性があるためです。 (= bad aji )。

1
bvdb

特定のインスタンスでは、個別の開始/終了タグが必要です。例として、HTMLの<script>タグは、一部のブラウザで一貫して動作するために個別の開始/終了が必要であることがわかりました。個別のオープン/クローズはもう少し冗長ですが、そのような場合には価値があります。

1
Femi

これらはXMLでも同じですが、使用方法によって異なる場合があります。たとえば、xhtml1.0には、自己クローズが許可されているタグの 公式リスト があります。 Doctypeを正しいxhtmlに保持している限り、問題ありません。詳細な説明については、stackoverflowの この質問 をご覧ください。

1
Lars