0

XML ファイルからいくつかのデータを収集しましたが、プログラムに適合するようにデータを編集しようとしています。私が収集したデータは、特定のパラメーターの最小値と最大値を示していますが、最小値または最大値のいずれかにのみ関心があります。

XML データ ソースは次のようになります。

<tolerated>
    <UMIN2> [ 181.2 186.8 ] </UMIN2>
    <T_UMIN2> [ 0.4 0.6 ] </T_UMIN2>
    <UMIN1> [ 197 203 ] </UMIN1>
    <T_UMIN1> [ 2.4 2.6 ] </T_UMIN1>
    <UMAX1> [ 249.2 256.8 ] </UMAX1>
    <T_UMAX1> [ 0.9 1.1 ] </T_UMAX1>
    <UMAX2> [ 260 268 ] </UMAX2>
    <T_UMAX2> [ 0.4 0.6 ] </T_UMAX2>
</tolerated>

このコードを使用して、このデータを tol という文字列にロードするプログラムを取得しました

public static String tolerance() throws SAXException, IOException, ParserConfigurationException, XPathExpressionException{
     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document doc = builder.parse(O1.replace("\\","\\\\"));
        XPathFactory xpf = XPathFactory.newInstance();
        XPath xpath = xpf.newXPath();

        String tTemp = new String();

        XPathExpression expr1 = xpath.compile("ptfGen/body/gridCode/"+header2.substring(31,header2.length()-23)+"/tolerated");
        Node nodeGettingChanged1 = (Node) expr1.evaluate(doc, XPathConstants.NODE);

        String toldata = new String();

        NodeList childNodes1 = nodeGettingChanged1.getChildNodes();
        for (int i = 0; i != childNodes1.getLength(); i++)
        {
            Node child = (Node) childNodes1.item(i);
            if (!(child instanceof Element))
                continue;

            if (child.getNodeName().equals("tolerated"));{
                toldata = child.getFirstChild().getNodeValue();

                tTemp += toldata.substring(3,toldata.length()-3).replace(" ", "\n") + "\n";
            }
            tol = tTemp;
        }
       return tTemp;
    }

これにより、改行で区切られたすべての値が得られます。

私の質問は、最小値または最大値のみを持つように、他のすべてのエントリを削除できますか/どのように削除できますか? ´

私が今得ている出力は次のようなものです

tol = {"181.2\n186.8\n0.4\n0.6\n197\n....."};

そして私が探しているのは

tol = {"181.2\n0.4\n197\n........"};

4

2 に答える 2

0

私は次のことをします:

  1. 一時を保持するクラスを定義します。

    public static class TempEntry {
        private final String min, max;
    
        public TempEntry(min, max){
            this.min = min;
            this.max = max;
        }
    
        public String getMin(){
            return min;
        }
    
        public String getMax(){
            return max;
        }
    }
    
  2. 解析時に、ノード内のテキストを分割し、新しいTempEntry

  3. パーサーは、不変List<TempEntry>またはTempEntry[]配列のいずれかを返す可能性があります。

  4. ここで、リストを反復処理し、パラメーター (最小のみ、最大のみ、両方など) に基づいて整形出力するメソッドまたは新しいクラスを作成します。

この方法では、解析ロジックをプレゼンテーション ロジック (より頻繁に変更される可能性があります) に結合しません。

于 2013-07-24T12:10:39.810 に答える