私は、libxml2 SAXパーサーのXMLエンティティの値を、アンサーをthis questionにどのように示唆しているかと同様に取得しています。具体的には、私のコードは、(attributes[i].value
が*xmlChar
である)ので、次のようになります。libxml2のエンティティがSAX解析された属性値をエンコードするのはなぜですか?
int valueLength = (int) (attributes[i].end - attributes[i].value);
value = [[[NSString alloc] initWithBytes:attributes[i].value
length:valueLength
encoding:NSUTF8StringEncoding
] autorelease];
しかし、属性値(この場合はURL)は、元のXMLで実体&
を持っているいくつかの理由で、私が得る価値のために&
です。
libxml2で属性エンティティをデコードするにはどうすればいいですか(テキストノードエンティティではうまくいくようです)、&
が得られますか?
はい、あなたのlibxml2ブログ投稿が私のコードの出発点でした。 AFAICTにはエンティティに関連するものはありません。 'xmlCreatePushParserCtxt()'には 'xmlReaderForFile()'と同様に 'options'引数はありません。しかし、おそらく 'simpleSAXHandlerStruct'構造体の右のスロットに関数ポインタが必要ですか?私は今それを見ている... – theory
ああ、それを見つけた。 'xmlContext = xmlCreatePushParserCtxt(&simpleSAXHandlerStruct、self、NULL、0、NULL);'という文脈を作成した行の後に、別の行に 'xmlCtxtUseOptions(xmlContext、XML_PARSE_NODICT | XML_PARSE_NOENT);オプションを設定します。それはトリックです。ありがとう! – theory
'XML_PARSE_NOENT'をちょうど使用しています。 'XML_PARSE_NODICT'が何のためのものなのかを知りません。これは一行の文書ではあまり意味がありません。 'XML_PARSE_NOENT'は私が必要なものです。なぜエンティティがテキストノードでデコードされるのか不思議ですが、属性値をデコードするにはこの設定が必要です。つまり、どうして違うはずですか?とにかく、もう一度ありがとう。 – theory