1

XQuery を使用して、XML ドキュメントから Java ソース コードを生成したいと考えています。たとえば、次のようになります。

<configuration package="my.package.name">

    <property>
        <name>First</name>
        <value>0</value>
        <description>First description</description>
    </property>

    <property>
        <name>Second</name>
        <value>2</value>
        <description>Second description</description>
    </property>
...

生成する必要があります:

package my.package.name;

class MyClass {
    // First description
    private String first;

    // Second description
    private String second;
}

私はこのように始めようとしていました:

xquery version "1.0";

"package "+$doc/@package
"class "+$doc/@classname
{
for $property in $doc//property
    return {
        "private String "+$property/name::text()
    }
}

構文は明らかに間違っており、それが実現可能かどうか疑問に思っています。ありがとう!

4

2 に答える 2

1

詳細は、クエリ プロセッサによって少し異なります。クエリ結果を文字列として返すことができるはずです。また、XSL のようにテキストのシリアル化メソッドを使用することもできる場合があります。ただし、これを呼び出す方法はクエリ プロセッサによって異なります。(2 つのアプローチの違いは、テキストのシリアル化方法では、クエリ結果のすべてが自動的に文字列に変換され、文字列が連結されることです)。

単一の文字列を返すクエリの形式でそれを行う方法は次のとおりです。

declare variable $nl "= '&#10;';
concat(
  "package ", $doc/@package, $nl,
  "class ", $doc/@classname, $nl,
  string-join(
    (for $property in $doc//property
     return {
        concat("private String ", $property/name)
     }), $nl)
)
于 2012-07-09T13:17:44.893 に答える
1

XQuery:

declare function xf:XML2Java($configuration as element(configuration))
    as xs:string {
    let $package := string($configuration/@package)
    let $newline := "&#13;"
       for $property in $configuration/property
       let $variable := data($property/name)
       let $javadoc := data($property/description)
       return
        fn:concat($package,$newline,"class MyClass{",$newline,"//",$javadoc,$newline,"private String ",$variable,";",$newline," }")     
};

入力:

<configuration package="com.test">
    <property>
        <name>Test</name>
        <value>somevalue</value>
        <description>This is test variable</description>
    </property>
</configuration>

出力:

com.test
class MyClass{
//This is test variable
private String Test;
 }

これは、WebLogic ワークショップの XQuery デザイナーで行いました。

于 2012-07-09T13:22:16.803 に答える