コンテクスト
xmldom は、最新のブラウザーに存在する次の API を他のランタイムに提供する JavaScript ポニーフィルです。
- XML 文字列を DOM ツリーに変換します
new DOMParser().parseFromString(xml, mimeType) => Document
- DOM ツリーの作成、アクセス、変更
new DOMImplementation().createDocument(...) => Document
- DOM ツリーをシリアル化して XML 文字列に戻します
new XMLSerializer().serializeToString(node) => string
出典: xmldom readme
歴史
2020 年 6 月にフォークされた xmldom ライブラリに貢献し始めて以来、40 回のリリースがありました。
これは非常に興味深くやりがいのあるプロジェクトであり、おそらくかなり長い間その状態が続くでしょう。
GitHub によると、フォークされてから 50 人以上が貢献しました。
すべての貢献者に改めて感謝します。
これには、すべてのセキュリティ修正を取得するために、元のスコープなしの xmldom パッケージからスコープありの @xmldom/xmldom パッケージ バージョン 0.7.0 への移行に成功したすべての人々は含まれていません。
lts タグとしてリリースされた最新バージョンは 0.7.13 です。
重大な変更が加えられた最後のバージョンは、約 3 年前の 2021 年 12 月 22 日にリリースされた 0.8.0 でした。
最新としてリリースされた最新バージョンは 0.8.10 です。
0.9.0 (2024-08-29)
しかし、今日話したいのは、2022 年 10 月以降に next タグの下でリリースされたすべてのものです。
これらの変更は、将来の潜在的な変更に対する明確な基盤を提供するものであるため、非常に興奮しています。
TLDR: 仕様との整合性を高め、相違点を可能な限り明確にしました。
1. mimeType を強制して制御を戻す
実装を複雑にする 1 つの側面は、XML と HTML の解析ルールが異なることです。
xmldom は(ある程度は)最初から両方のフレーバーを「サポート」していました。 mimeType を渡す必要さえありませんでした。適用するルールは、現在解析されている XML 文字列/ノードの現在のデフォルトの名前空間に基づいて決定されました。
これは 0.9.0 で終了します。今後は、DOMParser.parseFromString(xml, mimeType) の mimeType が必須となり、XML ルールを適用するか HTML ルールを適用するかを決定するためにチェックされる唯一のものになります。バスタ。
その情報は結果のドキュメント (新しいタイプのプロパティ) に保存されるため、シリアル化するときに適切なルールが再度適用されます。
これは大規模な (そして破壊的な可能性もある) 変更でしたが、これによって多くの関連するバグ修正が可能になり、実装がはるかに簡単になり、API と実装の複雑さも軽減されたので、準備ができたことに本当に興奮しています。
さらに、指定された MIME タイプのみを受け入れ、その他の場合は TypeError をスローするようになりました。
厳密さとエラー処理
ネイティブ ブラウザ API のエラー処理に関して個人的に混乱する点は、ネイティブ ブラウザ API が常に Document を返し、何か問題が発生した場合、parsererror ノードが本体の最初の子になることです。
xmldom ではエラー処理がこのように機能したことはありませんでしたが、既存のエラー処理は非常に複雑でわかりにくく、文書化も不十分であったため、0.9.0 ではそれが簡素化され、解析中に発生する潜在的なエラーに対して (はるかに) 一貫した動作が行われるようになりました。
ParseError ? がスローされます。次のいずれかの場合:
- 以前のバージョンでは、整形式ではない XML 文字列の場合、返される Document に documentElement が含まれない可能性があり、コードの後半で TypeError が発生する可能性が高くなります。
- いくつかの非整形式 XML 文字列は、fatalError として適切に報告されるようになり、常にそれ以上の処理が妨げられるようになりました。
- これまでエラーとして報告されなかった、または警告としてのみ報告されていたいくつかの事項も、fatalError として報告されるようになりました。
警告 (特に HTML 解析時) またはデータの処理を停止しないエラーとして報告されるケースがまだ残っていますが、新しいエラー処理により、コードがどの程度厳密であるかを非常に簡単に判断できるようになります。 xmldom を使用する必要があります。
DOMParser コンストラクターに渡すことができる (仕様に準拠していない) オプションは、onError と呼ばれます。
次のシグネチャを持つ関数を受け取ります:
function onError(level:ErrorLevel, message:string, context: DOMHandler):void;
- ErrorLevel は、警告、エラー、または致命的エラーのいずれかです
- xmldom は、次の 2 つの最も一般的な使用例の実装をすでに提供しています。
- onErrorStopParsing は、すべてのエラー レベルの問題に対しても ParseError をスローします
- onWarningStopParsing は、すべてのエラー レベルの問題に対しても ParseError をスローします
予期しないものの最初のシグナルで XML の処理を停止するには、これらのいずれかを適用することをお勧めします。
// prevent parsing of XML that has `error`s new DOMParser({onError: onErrorStopParsing}).parseFromString(...) // prevent parsing of XML that has `warning`s new DOMParser({onError: onWarningStopParsing}).parseFromString(...)
compareDocumentPosition, extended HTML entities , null instead of undefined, ...
Another fork of the original xmldom repository made it's way back into our repo by extending the HTML entities to the complete set (also available in 0.8.x) and porting over the implementation of the compareDocumentPosition API. Thank you, and welcome @zorkow
Along the way several places where xmldom so far returned undefined instead of null, have been fixed to adhere to the spec.
And I discovered that the former author seems to have preferred iterating from the end of a list in so many places, that attributes were processed in the reverse order in multiple places, which is now fixed.
The implementation of the removeChild API changed quite a bit, to comply to the spec and throws a DOMException when it should.
And 3 related bugs were fixed in a way that clearly states what the future direction of xmldom is:
Support for lax HTML parsing rules will only be provided if proper strict XML parsing doesn't suffer from it.
The former (broken) "support" for automatic self closing tags in HTML is gone.
coctype internalSubset
More recently @shunkica invested a huge amount of time end effort to fix tons of issues in the former handling of the internalSubset part of the !DOCTYPE.
It is now preserved as part of the internalSubset property of the doctype of a Document and many wrong doctype declarations are now correctly detected as such and reported as a fatalError.
Also thanks to @kboshold for the latest bug fix in this area.
Along the way we created a new module containing regular expressions for the relevant grammar, and correctness checks are based on those and they are properly covered by tests.
It is not the goal of xmldom to become a validating parser, but this a great step to support those documents that come with more complex DTDs.
And there is even more
Up to now development was done using Node v10, since this is also the lowest version xmldom currently supports. As part of the work on the upcoming version, I decided to switch to v18 for development, since more and more devDependencies also made this a minimum requirement. This will be the new minimum runtime version for the time being starting with this release.
I initiated a public poll / dicussion to ask people which version of Node or other runtimes they need support for.
The next breaking release will most likely drop support for some older Node versions, if there is no feedback indicating something different.
Along the way plenty of APIs have received jsdoc comments with proper types.
Thank you
for taking the time to read through all of this.
Those are quite some changes, and I'm very excited to be able to ship those.
I hope you are as excited as I am :)
If you need more details you can go through the very detailed changelog, or head over to the repository and join or start a discussion or file an issue.
以上が.f `@xmldom/xmldom` をリリースします。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。

JavaScriptは、最新のブラウザにすでに組み込まれているため、インストールを必要としません。開始するには、テキストエディターとブラウザのみが必要です。 1)ブラウザ環境では、タグを介してHTMLファイルを埋め込んで実行します。 2)node.js環境では、node.jsをダウンロードしてインストールした後、コマンドラインを介してJavaScriptファイルを実行します。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

WebStorm Mac版
便利なJavaScript開発ツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

メモ帳++7.3.1
使いやすく無料のコードエディター
