Q&A
前提
GASでスクレイピングをしてます。
取得したいXMLサイトから
XML
XmlからXmlServiceを使用して取得したくコードを書いています。
回答でお教えいただいたコード
使用したコード
をもとに、いろんな要素を取得してます
目標
目標は取得してスプレッドシートに保存したいです。
その前に、取得コードを考えています。
スプレッドシートに取得して作成する表
ArticleCaption | ArticleTitle | ItemTitle | Sentence |
---|---|---|---|
(業務) | 第三条 | 司法書士は、この法律の定めるところにより、他人の依頼を受けて、次に掲げる事務を行うことを業とする。 | |
一 | 登記又は供託に関する手続について代理すること。 |
発生している問題・エラーメッセージ
TypeError: Cannot read property 'getText' of null console.log(sentence.getText());の部分でエラー
該当のソースコード
function parseXml() { let url = 'https://elaws.e-gov.go.jp/api/1/lawdata/昭和二十五年法律第百九十七号'; let xml = UrlFetchApp.fetch(url).getContentText(); let document = XmlService.parse(xml); let root = document.getRootElement(); const applData = root.getChild("ApplData"); const lawFullText = applData.getChild("LawFullText"); const law = lawFullText.getChild("Law"); const lawBody = law.getChild("LawBody"); const mainProvision = lawBody.getChild("MainProvision"); const chapter = mainProvision.getChild("Chapter"); const articles = chapter.getChildren("Article"); articles.forEach(article => { const articleCaption = article.getChild("ArticleCaption"); const articleTitle = article.getChild("ArticleTitle"); const paragraph = article.getChild("Paragraph"); const paragraphSentence = paragraph.getChild("ParagraphSentence"); const sentence = paragraphSentence.getChild("Sentence"); const item = paragraph.getChild("Item"); console.log(articleCaption.getText()); console.log(articleTitle.getText()); console.log(sentence.getText()); if (item !== null){ const itemtitle = item.getChild("ItemTitle"); const itemSentence = item.getChild("ItemSentence"); const sentence = itemSentence.getChildren("Sentence"); console.log(itemtitle.getText()); console.log(sentence.getText()); } }); }
ItemTitleまでは取得でき、ItemSentenceの中のSentenceでエラーになりました。
一つずつ要素を取得していき、sentenceでエラーになってしまいます。
取得したいXMLデータ <Article Num="5"> <ArticleCaption>(欠格事由)</ArticleCaption> <ArticleTitle>第五条</ArticleTitle> <Paragraph Num="1"> <ParagraphNum/> <ParagraphSentence> <Sentence Num="1" WritingMode="vertical">次に掲げる者は、司法書士となる資格を有しない。</Sentence> </ParagraphSentence> <Item Num="1"> <ItemTitle>一</ItemTitle> <ItemSentence> <Sentence Num="1" WritingMode="vertical">禁錮以上の刑に処せられ、その執行を終わり、又は執行を受けることがなくなつてから三年を経過しない者</Sentence> </ItemSentence> </Item> <Item Num="2"> <ItemTitle>二</ItemTitle> <ItemSentence> <Sentence Num="1" WritingMode="vertical">未成年者</Sentence> </ItemSentence> </Item> <Item Num="3"> <ItemTitle>三</ItemTitle> <ItemSentence> <Sentence Num="1" WritingMode="vertical">破産手続開始の決定を受けて復権を得ない者</Sentence> </ItemSentence> </Item> <Item Num="4"> <ItemTitle>四</ItemTitle> <ItemSentence> <Sentence Num="1" WritingMode="vertical">公務員であつて懲戒免職の処分を受け、その処分の日から三年を経過しない者</Sentence> </ItemSentence> </Item> <Item Num="5"> <ItemTitle>五</ItemTitle> <ItemSentence> <Sentence Num="1" WritingMode="vertical">第四十七条の規定により業務の禁止の処分を受け、その処分の日から三年を経過しない者</Sentence> </ItemSentence> </Item> <Item Num="6"> <ItemTitle>六</ItemTitle> <ItemSentence> <Sentence Num="1" WritingMode="vertical">懲戒処分により、公認会計士の登録を抹消され、又は土地家屋調査士、弁理士、税理士若しくは行政書士の業務を禁止され、これらの処分の日から三年を経過しない者</Sentence> </ItemSentence> </Item> </Paragraph> </Article>
試したこと
getChildとgetChildrenの間違い?
で入れ替えてトライしてみました。
Item→ItemTitle
→ItemSentence→Sentenceと認識してコードを書いています。
初歩的ですみません。
どなたかヒントお教えいただけないでしょうか。
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2022/10/13 09:07