<tag id="foo" />
PHP SimpleXML。
しかし、私がWebで見つけたすべてのXMLの例は、古い方法でそれらを閉じます。
<tag id="foo"></tag>
古い方法を使用する理由はありますか?
XMLおよびXHTMLのW3C仕様を参照してください。
Element Type宣言に依存します
コンテンツのない要素は空と呼ばれます。空要素の表現は、開始タグの直後に終了タグが続くか、空要素タグのいずれかです。
だけでなく
空要素タグは、キーワードEMPTYを使用して宣言されているかどうかにかかわらず、コンテンツを持たない要素に使用できます。相互運用性のために、EMPTYとして宣言された要素に対しては、空要素タグを使用する必要があり(SHOULD)、使用する必要があります(SHOULD)。
つまり、DTDに次のようなものが含まれている場合
<!ELEMENT img EMPTY>
あなたshoulduse
<img/>
使用する正当な理由がない限り
<img></img>
この言葉、または「推奨」という形容詞は、特定の状況で特定の項目を無視する正当な理由が存在する可能性があることを意味しますが、別のコースを選択する前に完全な意味を理解して慎重に検討する必要があります。
DTDまたはスキーマを持たないXMLを使用している場合は、XMLのシリアル化方法に 事前定義されたlibxml定数 を使用することもできます。
LIBXML_NOEMPTYTAG(整数):空のタグを展開します(例:
<br/>
から<br></br>
)
ただし、このオプションは現在、関数DOMDocument::save
およびDOMDocument::saveXML
なので、SimpleXmlでは使用できません。
はい、それは最初に見えるほど単純ではありません。
まず、データ型に依存します。要素のタイプを定義するXSDスキーマ定義を使用する場合、<element></element>
は実際には文字列タイプにのみ使用できます。なぜなら、それはそれであり、実際には空の文字列値""
であるためです。
そのため、整数に<element></element>
を使用することは違法ですが、対照的に<element/>
はすべての単純型に適用できます。
JAXB(Java XMLバインディング)にも同様の癖があります。 <element/>
をターゲットデータタイプに応じて異なる値としてマッピングします:
<element/>
がnull
の値に解決されると思われるかもしれません。ただし、実際には<element xsi:nil="true"/>
を使用する必要があります。私は実際に見たことがありません。
HTMLには常に、<element>
の3番目のオプションがあり、タグを閉じません。私はあなたのことは知りませんが、1日に数回、HTMLは単なるXMLではないことを思い出す必要があります。そして、実際には<br>
と<br/>
は同じものではないということです。 HTMLでは<br/>
を使用しないでください。XHTMLでは<br>
を使用しないでください。
しかし、Angular2 +のようなフレームワークを使用する場合、最後のステートメントを続けて、私が本当にやりたかったことを心に留めておく必要があります。
あまり詳細に飛び込まずに、AngularはカスタムHTMLタグをコンポーネントにリンクされたHTMLテンプレートに置き換えます。ただし、は<element></element>
形式のみをサポートします。<element/>
形式の使用は許可されていません。
私は個人的に<element/>
構文を避けようとしていますが、これは物事がうまくいかない可能性があるためです。 (= bad aji )。
特定のインスタンスでは、個別の開始/終了タグが必要です。例として、HTMLの<script>タグは、一部のブラウザで一貫して動作するために個別の開始/終了が必要であることがわかりました。個別のオープン/クローズはもう少し冗長ですが、そのような場合には価値があります。