2017-09-20 3 views
1

다른 .net 응용 프로그램을 호출하여받은 통합 된 제품 xml을 다시 가져옵니다. Xml에는 P1, P2, P3 등과 같은 다양한 하위 제품에 대한 데이터가 들어 있습니다. xml을 구문 분석하고 각 하위 제품 P1, P2, P3 ....에 대해 세 개의 별도 xmls..i.e.one으로 나누는 C# 프로그램을 작성해야합니다. 각 하위 제품에 대해 xml을 구문 분석하기위한 비즈니스 규칙 (또는 기준)이 다릅니다.올바른 디자인 방식 : xml 파싱

앞으로는 입력 XML에도 새로운 추가 하위 제품 P4, P5 등의 정보가 포함될 수 있습니다. 그래서이 XML을 새 하위 제품으로 나눌 필요가 있습니다.

모듈 디자인 관점에서 하위 제품 유형 및 해당 구문 분석 기준은 확장 가능하고 구성 가능해야합니다. 새 하위 제품을 처리해야 할 때 구성 변경 만 필요하고 코드 변경이 필요하지 않습니다. 필요합니다.

그래서 나는 다음과 같은 접근법을 생각하고있었습니다.

1. 데이터베이스에 T라는 새 조회 테이블을 추가하십시오.

2.Add 3 열 : 아이디 (INT), 하위 제품 이름 (VARCHAR)

3.To는 하위 제품을 구성, 기준 (VARCHAR)가 데이터베이스에 P1 말, 행은 같이 할 수 다음과 같습니다 :

1--P1--ProductType='XYZ'|ProductCategory='ABC'| 
2--P2--.... 
3--P3--... 

여기에서 ProductType 및 ProductCategory는 입력 XML의 유효한 요소 이름입니다.

4.Then는 C# 프로그램 프로세스의 반사를 이용하여 해당 서브 제품명 즉 P1에서 XML을 얻기 위해 입력 XML의 규칙을 적용 기준 열 값 ..

감사합니다.

+0

저는 데이터베이스 아키텍처를 설계하여 프로젝트를 시작하고 싶습니다. 좋은 데이터베이스가 항상 코딩의 나머지 부분을 쉽게 만들 수 있습니다. 나는 또한 데이터베이스와 C# 코드의 나머지 부분 사이의 기본 인터페이스로 C#에서 데이터 테이블을 사용하는 것을 좋아합니다. 데이터 테이블에서 DGV에 결과를 쉽게 표시 할 수 있습니다. 또한 데이터 테이블 읽기/쓰기 Xml() 메서드를 사용하여 XML 파일에 데이터를 읽거나 쓰십시오. 현재 WriteXml 데이터 테이블 메서드가 일치하지 않으면 현재 XML 파일의 구조도 변경됩니다. 설명이 없으면 설명에서 알 수 없습니다. 접근 방식은 동일하지만, 제 생각에는 비슷합니다. – jdweng

답변

0

가장 간단한 방법은 XSLT 스타일 시트 (XSLT 2.0 이상이므로 Saxon 또는 XmlPrime 사용)를 호출하는 것입니다. 기준이 고정 된 경우 제품의 정의가 너무 많은 "코드 변경"같은 느낌 변경이 스타일을 변경하는 경우

다음 스타일 시트

<xsl:transform....> 

<xsl:template match="P1"> 
    <xsl:result-document href="subproduct1.xml"> 
    <xsl:copy-of select="."/> 
    </xsl:result-document> 
</xsl:template> 

<xsl:template match="P2"> 
    <xsl:result-document href="subproduct2.xml"> 
    <xsl:copy-of select="."/> 
    </xsl:result-document> 
</xsl:template> 

... 
</xsl:transform> 

같은 것을 할 수있는, 당신은 몇 가지 더 높은에서이 스타일 시트를 생성 할 수 제품 구조의 레벨 정의. XSLT의 장점 중 하나는 XML이므로 XSLT 스타일 시트를 생성하기 위해 XSLT 스타일 시트 (메타 스타일 시트라고 함)를 작성할 수 있다는 것입니다. 이것은 소리처럼 이국적이지 않습니다. 그것은 꽤 일반적인 관행입니다.

+0

귀하의 의견에 감사드립니다. 만약 입력이 직렬화 가능한 객체라면, 내가 언급 한 접근 방식으로 충분할 것인가? 고마워. –

+0

나는 당신이 염두에 두거나 직렬화가 가능한 부분이 무엇인지에 대해 확신하지 못한다. 내가 어떻게 할 것인지 말하고있는 중이 야. (StackOverflow에 대한 디자인 질문은 종종 "의견에 기초한"것으로 받아 들여지고, 그에 대한 정당성이 있습니다. 한 디자인이 객관적으로 객관적으로 판단 될 수있는 기준을 제시하지 않았습니다.) –