コンテンツにスキップ

$parser

$parserは、文字列として扱えるXML、HTML、CSV、TSV、JSONや、ファイルパスで指定したExcelファイルを解析し、workから扱いやすい操作オブジェクトとして参照するためのAPIです。

$parserは入力を解析して参照しやすい形に変換するためのAPIです。ファイルや入力データを書き換えるものではなく、読み取った内容を検索、参照、集計、出力する作業に使います。

$parserの各関数は、対象データを直接操作するための処理本体ではなく、文字列やファイルパスを専用の操作オブジェクトへ変換する入口です。

入口入力返る操作オブジェクト
$parser.xml(source)XML文字列DomController
$parser.html(source)HTML文字列DomController
$parser.excel(filePath)ExcelファイルパスBook
$parser.csv(source)CSV文字列TableInspector
$parser.tsv(source)TSV文字列TableInspector
$parser.json(source)JSON文字列JsonInspector

以降の検索、行参照、セル参照、パス参照などは、取得した操作オブジェクトのメソッドで行います。

const source = `<users>
<user id="001">taro</user>
<user id="002">jiro</user>
</users>`;
const dom = await $parser.xml(source);

XML文字列をDOMとして扱うための入口です。返り値はDomControllerです。ノード検索や属性取得はDomController / XmlNodeを参照してください。

const source = `<html>
<body>
<h1>Trace Kernel</h1>
<a href="/download/">Download</a>
</body>
</html>`;
const dom = await $parser.html(source);

HTML文字列をDOMとして扱うための入口です。Webページや保存済みHTMLから、タイトル、リンク、表などの必要な要素を取り出す作業に使います。操作APIはDomController / XmlNodeを参照してください。

const book = await $parser.excel(`${$env.ROOT_DIR}\\sales.xlsx`);

ExcelファイルをBookとして扱うための入口です。Excelだけは文字列ではなく、ファイルパスを指定します。シート、行、セル、表形式データの参照はBook / Sheet / Row / Cellを参照してください。

const source = `id,name,amount
001,taro,1200
002,jiro,900`;
const table = $parser.csv(source);

CSV文字列を表として扱うための入口です。返り値はTableInspectorです。行、列、型付きの値の参照はTableInspector / TableRowを参照してください。

const source = `id\tname\tstatus
001\ttaro\tactive
002\tjiro\tinactive`;
const table = $parser.tsv(source);

TSV文字列を表として扱うための入口です。CSVと同じくTableInspectorを返しますが、TSVでは列値は文字列として扱われます。操作APIはTableInspector / TableRowを参照してください。

const source = `{
"users": [
{ "id": "001", "name": "taro" },
{ "id": "002", "name": "jiro" }
]
}`;
const json = $parser.json(source);

JSON文字列をパス指定で参照するための入口です。返り値はJsonInspectorです。users[0].nameのようなパスで値を取り出す操作はJsonInspectorを参照してください。

work内では、$parserは次のAPIとして補完されます。

type ParserAPI = {
xml: (source: string) => Promise<DomController>;
html: (source: string) => Promise<DomController>;
excel: (filePath: string) => Promise<Book>;
csv: (source: string) => TableInspector;
tsv: (source: string) => TableInspector;
json: (source: string) => JsonInspector;
};