0

sxdスキーマからXMLノードのすべての可能な子および属性情報を取得するにはどうすればよいですか?タグ名を渡した場合にそのような情報を提供するスキーマパーサー(DOMのような)はありますか?たとえば、「getChildNodes(NodeName)」を渡すと、すべての可能な子が与えられます。助けてください..よろしくお願いします!

4

2 に答える 2

0

それは依存しています... TypeInfoProviderでいくつかの情報を取得できる場合があります。

package thebestone;

import java.io.File;
import javax.xml.XMLConstants;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.TypeInfoProvider;
import javax.xml.validation.ValidatorHandler;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;

public class valid
{
  public static void main(String[] args) throws Exception
  {
    Schema schem =
      SchemaFactory.
      newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI).
      newSchema(new File("schema.xsd"));
    ValidatorHandler valhand = schem.newValidatorHandler();
    TypeInfoProvider typprov = valhand.getTypeInfoProvider();
    valhand.setContentHandler(new TypeListener(typprov));
    XMLReader read = XMLReaderFactory.createXMLReader();
    read.setContentHandler(valhand);
    read.parse("doc.xml");
  }

  public static class TypeListener extends org.xml.sax.helpers.DefaultHandler
  {
    TypeInfoProvider typinfo;

    TypeListener(TypeInfoProvider prov)
    {
      typinfo = prov;
    }

    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException
    {
      super.startElement(uri, localName, qName, attributes);
      System.out.println("localName="+localName+", typinfo="+typinfo.getElementTypeInfo());
    }
  }
}
于 2013-03-02T21:28:09.997 に答える
0

あなたが求めるものに注意してください。要素名を知っているだけでは、可能なすべての子が何であるかを知るには十分ではありません。これは、要素が表示されるコンテキストに依存するためです。最悪の場合、スキップ検証されたドキュメントの一部である可能性があります。何でも含むことができます。複雑な型から始める方が良いですが、置換グループと、拡張によって開始型から派生した型を考慮する必要があるため、それでも複雑な問題です。ワイルドカードは言うまでもありません。

Saxon では、かなり低レベルの内部 API を使用してそれを行うことができます。興味のある ComplexType が見つかったら、gatherAllPermittedChildren() を呼び出して、子として表示される可能性のある要素のリストを取得できます。コンテンツ モデルでワイルドカードを無視するかどうか。

于 2013-02-26T18:54:49.557 に答える